在最终的JRadioButton上使用.setText

时间:2014-04-03 05:21:11

标签: java jradiobutton

如果将JRadioButton设置为final,我该如何更改它?

这是构造函数中的一段代码,其中单选按钮被初始化,当按下复选按钮时,所选单选按钮的值被发送到验证用户答案的​​方法:

final JRadioButton ANSWER1 = new JRadioButton("Empty 1");
final JRadioButton ANSWER2 = new JRadioButton("Empty 2");
final JRadioButton ANSWER3 = new JRadioButton("Empty 3");
final JRadioButton ANSWER4 = new JRadioButton("Empty 4");

JButton CHECK = new JButton("Check");
CHECK.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
        if (ANSWER1.isSelected()){
            qAnswered(1);
        }
        if (ANSWER2.isSelected()){
            qAnswered(2);
        }
        if (ANSWER3.isSelected()){
            qAnswered(3);
        }
        if (ANSWER4.isSelected()){
            qAnswered(4);
        }

    }   

});

当选择下一个问题按钮时,单选按钮的文本标签需要更改为下一组答案。不幸的是,因为单选按钮设置为final,这会导致应用程序崩溃。

我该怎么办?

1 个答案:

答案 0 :(得分:3)

变量的final关键字表示该变量只能初始化一次,但这并不意味着该对象中的字段无法更改。即使JRadioButton引用为finalANSWER4.setText()也不会抛出任何最终相关错误。

if (ANSWER1.isSelected()){
    qAnswered(1);
    ANSWER1.setText("New Text 1"); // This will work
}

有关final变量的更清晰,来自JLS 4.12.4(强调我的)

  

变量可以声明为final。最终变量只能分配一次。声明变量final可以作为有用的文档,它的值不会改变,可以帮助避免编程错误。

     

如果分配了最终变量,那么这是一个编译时错误,除非在分配之前它是明确未分配的(§16)。

     

空白决赛是一个最终变量,其声明缺少初始值。

     

一旦指定了最终变量,它总是包含相同的值。如果最终变量包含对象的引用,则可以通过对象上的操作更改对象的状态,但变量将始终引用同一对象。