Java - ItemListener没有收听我的组件?

时间:2013-05-14 19:25:02

标签: java swing itemlistener

我拿了一段程序并把代码放在这里。 基本上问题是项侦听器方法不被称为。在这里,如果用户选择正确的答案并按“提交”,则actionlistener方法将告诉他/她他们是否得到了正确的答案。

static boolean answer = false; // returns this as true if user got question right

public void QuizPanel() {
    QuizPanel = new JPanel();
    QuizPanel.setLayout(null); // default layout

    JLabel label = new JLabel( "True/False- Java is Object Orientated?");
    label.setBounds(10, 50, 400, 20);
    QuizPanel.add(label);

    option1 = new JCheckBox("True"); 
    option1.setSelected(false);
    option1.setBounds(10, 70, 120, 40);                         
    QuizPanel.add(option1);
    option1.addItemListener(this); // Adds a item listener

    option2 = new JCheckBox("False");
    option2.setSelected(false);
    option2.setBounds(40, 70, 120, 40);
    QuizPanel.add(option2);
    option2.addItemListener(this);

    ///////////////////////////////////////

    JButton submit = new JButton("SUBMIT ANSWER:");
    submit.setBounds(10, 100, 150, 20);
    QuizPanel.add(submit);

    submit.addActionListener(new ActionListener() { // Action Listener      
        public void actionPerformed(ActionEvent evt2) {
            System.out.println ("Your answer is " + answer); // Got it right?
        }
    });
}

public void itemStateChanged1(ItemEvent e1) { 
    Object source = e.getItemSelectable();          
    if (source == option1) { 
        answer = true;
    } else {
        //nothing- stays false
    }       
}

没有任何反应,也没有告诉用户他/她是对还是错。

2 个答案:

答案 0 :(得分:3)

QuizPanel = new JPanel();

使用标准Java命名约定。变量名称不应以大写字符开头:

QuizPanel.setLayout(null);
...
label.setBounds(10, 50, 400, 20);

不要使用null布局和setBounds()。 Swing旨在与布局管理器一起使用。

public void itemStateChanged1(ItemEvent e1) throws IOException

我不知道您的代码是如何编译的。您正在实施错误的方法。另外,为什么ItemListener会抛出IOException?

太多的小错误来猜测你做错了什么。发布适当的SSCCE。

答案 1 :(得分:0)

您说Object source = e.getItemSelectable();

但是您声明e1ItemEvent

请尝试将Object source = e.getItemSelectable();更改为Object source = e1.getItemSelectable();