你能详细告诉我如何知道是否检查了jcheckbox?方法isSelected对我不起作用,它在运行时给我一个例外
{
Sandwich = new JButton("Tall");
contentPane.add(Tall);
Sandwitch.setBounds(350, 110, 90,40); //in main
Sandwitch.addActionListener(this);
}
.....
public void actionPerformed(ActionEvent event) {
JButton clickedButton = (JButton) event.getSource();
String buttonText = clickedButton.getText();
..........
if(clickedButton.getText()=="Sandwitch"){
if(Ketchup.getState()&&!Garlic.getState()){//
itm=new Item(""+m+clickedButton.getText(),3.0);
xyz.addItem(itm);
textArea.append(" "+clickedButton.getText()+",");
textArea.append(" "+itm.getPrice()+"\n");
}
else if(!Ketchup.isSelected()&&Garlic.isSelected()){//
....................
}
它在运行时给出了这个非常长的异常: Here
你可以帮我解决这个问题吗?答案 0 :(得分:1)
问题在于:
JCheckBox Ketchup = new JCheckBox();
Ketchup.setText("Ketchup");
Ketchup.setSize(50,25);
contentPane.add(Ketchup);
Ketchup.setBounds(175, 100, 175,25);
JCheckBox Garlic = new JCheckBox();
Garlic.setText("Garlic");
Garlic.setSize(50,25);
contentPane.add(Garlic);
Garlic.setBounds(175, 120, 175,25);
由于分配前面的“JCheckBox”,此代码声明了称为Ketchup和Garlic的局部变量。在方法之外,这些变量不再存在。
同时,ClassName(ProjectInterface?)的私有字段具有相同的名称,但在其他方面不相关。它们保留为空。
将上面的代码移到ClassName构造函数中,并删除赋值前面的“JCheckBox”。所以你会:
private JCheckBox Ketchup;
private JCheckBox Garlic;
public ClassName() {
Ketchup = new JCheckBox();
Ketchup.setText("Ketchup");
Ketchup.setSize(50,25);
add(Ketchup);
Ketchup.setBounds(175, 100, 175,25);
Garlic = new JCheckBox();
Garlic.setText("Garlic");
Garlic.setSize(50,25);
add(Garlic);
Garlic.setBounds(175, 120, 175,25);
}