gpt4 book ai didi

java - 关于 JApplet ItemListener

转载 作者:行者123 更新时间:2023-12-02 06:48:49 27 4
gpt4 key购买 nike

我正在尝试为一个简单的 Applet 运行以下代码,但在调用 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 布局是一场即将发生的灾难。

关于java - 关于 JApplet ItemListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18293027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com