Java 关于JappletItemListener

Java 关于JappletItemListener,java,swing,applet,nullpointerexception,itemlistener,Java,Swing,Applet,Nullpointerexception,Itemlistener,我试图为一个简单的小程序运行以下代码,但在调用ItemListener时不断出现错误。不管怎样,我都知道怎么解决这个问题。 当我选中任何复选框“线程中的异常”AWT-EventQueue-1“java.lang.NullPointerException”时,我试图显示的消息没有显示出来。按钮很好用 import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Hotel ex

我试图为一个简单的小程序运行以下代码,但在调用ItemListener时不断出现错误。不管怎样,我都知道怎么解决这个问题。 当我选中任何复选框“线程中的异常”AWT-EventQueue-1“java.lang.NullPointerException”时,我试图显示的消息没有显示出来。按钮很好用

    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;

public class Hotel extends JApplet implements ActionListener{
JCheckBox cb1, cb2;
JButton b1, b2;
JLabel lb;
JTextField jt;
double tot,num;

public void init(){
    Container cp=getContentPane();
    cp.setLayout(null);
    cb1=new JCheckBox("Single");
    cb2=new JCheckBox ("Double");
    b1=new JButton ("Amount");
    b2= new JButton("Exit");
    lb= new JLabel("");
    jt=new JTextField();
    jt.setBounds (100,100,70,20);
    cb1.setBounds(100, 50,70,20);
    cb2.setBounds(100,200,70,20);
    b1.setBounds(100,250,100,20);
    b2.setBounds(100,300,70,20);
    lb.setBounds(100,400,200,20);

    cp.add(lb);
    cp.add(cb1);
    cp.add(cb2);
    cp.add(b1);
    cp.add(b2);
    cp.add(jt);
    b1.addActionListener(this);
    b2.addActionListener(new BtnExit());
    cb1.addItemListener(new CBox());
    cb2.addItemListener(new CBox2());

}

      @Override
public void actionPerformed(ActionEvent ae) {
   //this one works fine
    num=Double.parseDouble(jt.getText());
       if (cb1.isSelected()){
           tot=10000*num;
                                     }
       if (cb2.isSelected()){
          tot=15000*num;
           lb.setText("15 000/room");
       }
      lb.setText(String.valueOf(tot));
}
}

class CBox implements ItemListener {

@Override
public void itemStateChanged(ItemEvent ie) {
    //to display the price per room once the user ticks on "Single"
    Hotel h=new Hotel();
    h.lb.setVisible(true);
    h.lb.setText("You will pay 10000/room");
                }


}
class CBox2 implements ItemListener{

@Override
public void itemStateChanged(ItemEvent ie) {
   //to display the price per room once the user ticks on the "Double" checkbox
    Hotel h=new Hotel();
    h.lb.setVisible(true);
    h.lb.setText("You will pay 15 000/room");
}

}

您正在侦听器中创建新的
Hotel
实例,而不是修改旧实例。您应该将现有实例传递给侦听器:

class CBox implements ItemListener {
    final Hotel hotel;
    CBox(Hotel h) {
        this.hotel = h;
    }

    @Override
    public void itemStateChanged(ItemEvent ie) {
        hotel.lb.setVisible(ie.getStateChange() == ItemEvent.SELECTED);
        hotel.lb.setText("You will pay 10000/room");
    }
}
用起来像:

cb1.addItemListener(new CBox(this));
此外,您可能应该选中新复选框状态,而不是将标签设置为无条件可见。正如对预期功能的观察(在上述代码中实现)

对于其他项侦听器也是如此

或者,您可以使用匿名类:

cb1.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent ie) {
        lb.setText("You will pay 10000/room");
        lb.setVisible(ie.getStateChange() == ItemEvent.SELECTED);
    }
});

此外,您还应该真正使用布局管理器。Swing设计用于处理这些问题
null
布局是一场即将发生的灾难。

发布堆栈跟踪并指出代码中的行。1)为什么要编写小程序?如果是由于老师的特殊要求,请参考。2) 确保配置为显示小程序和JWS应用程序。如果默认级别没有输出,请提高该级别并重试。3) 始终复制/粘贴错误和异常输出。“
null
layouts是一场等待发生的灾难。”就像泰坦尼克号在处女航时的一段精彩片段一样。。javagui可能必须在许多平台上工作,在不同的屏幕分辨率上&使用不同的plaf。因此,它们不利于部件的精确放置。要为健壮的GUI组织组件,请改为使用布局管理器,或者与布局填充和边框一起使用。