在Action Listeners中修改布尔值

时间:2014-03-23 02:57:45

标签: java swing if-statement swt

代码:

    final boolean saveedit = true;

    btnSaveEdit.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            if (saveedit) {

                // save function
                if (txtMessage.getText().length() != 0) {
                    message = txtMessage.getText();

                }
                // show popup

                JOptionPane.showMessageDialog(frmEventsAndProperties,
                        "Your last message is: " + message, "Message",
                        JOptionPane.PLAIN_MESSAGE);

                btnSaveEdit.setText("Edit");
                txtMessage.setEnabled(false);
                saveedit = false;
            } else {
                // edit function

            }
        }
    });

错误:

  

'无法分配最终的局部变量saveedit,因为它是在封闭类型中定义的。

问题:

我已经看到了类似相同错误的其他解决方案,但必须有一种简单的方法来实现它 - 可能就像之前定义某些内容或移动它一样简单。

我将不胜感激。

3 个答案:

答案 0 :(得分:3)

如果您想在内部类(此处为ActionListener)中使用变量,您有两种选择(关于如何使用它,修改(变异)或访问):

  1. final关键字与局部变量一起使用(对于您的情况,不推荐,因为您希望在内部类中修改您的变量, 不能仅访问
  2. 使用可兑换字段,不必final推荐
  3. 正如我所提到的,seconed解决方案对你来说是可行的,因为你想做saveedit = false;变异。

答案 1 :(得分:2)

我完全同意 sager89 。但我想在这里添加一件事。

如果关键字final用于实例变量,则最终变量只能在声明时分配一次,或者您必须在每个构造函数中分配一次。

答案 2 :(得分:0)

这个问题不重复,答案是任何想要简单移动的人

final boolean saveedit = true; 介于这些界限之间:

btnSaveEdit.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

这样它就没有在封闭类型中定义:)