【问题标题】:saving data generated inside anonymous inner classes保存匿名内部类中生成的数据
【发布时间】:2013-04-24 03:42:58
【问题描述】:

我的程序中有一个 JTextField,我通过使用匿名内部类连接了一个键盘侦听器。侦听器清除文本框并保存当前在其上的单词。

我希望能够在代码的其他部分使用我从中得到的那个词,但我知道内部类中使用的所有变量都必须标记为 final.. 那么我该怎么做呢?

这是我的简化代码,给你们一个想法 - 我希望能够使用 userWord

    typingArea.addKeyListener(new KeyAdapter() {
        public void keyPressed (KeyEvent e) {
            if (e.getKeyCode() == KeyEvent.VK_ENTER) { // enter key is pressed
                userWord = typingArea.getText().toLowerCase();
                typingArea.setText("");

            }
        }
    });

编辑:刚刚想到可能将它作为构造函数变量传递给我可以创建的另一个对象,然后该对象将能够提取并保存该字符串..这可行吗?对不起,如果我在询问后一秒钟就想到了解决方案,那么毫无意义的问题,哈哈。

【问题讨论】:

    标签: java swing jtextfield inner-classes anonymous-inner-class


    【解决方案1】:
    1. 使用ActionListener 而不是KeyListenerKeyEvent.VK_ENTER - 原因有很多,但基本上,这就是ActionListener 的设计目的。
    2. 使用类字段而不是局部变量...

    更像...

    public class MyForm extends JPanel {
    
        private JTextField typingArea;
        private String userWord; 
    
        public MyForm() {
    
            typingArea = new JTextField();
            typingArea.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    userWord = typingArea.getText().toLowerCase();
                    typingArea.setText("");
                }
            });
        }
    }
    

    【讨论】:

    • 我最初使用了一个类字段 - 但它必须标记为 final 不允许对其进行编辑,所以我这样写是因为使用类字段甚至不会编译 - 并且我不确定如何使用 ActionListener 来确定是否按下了 Enter,或者为什么这样一个简单的操作会更好?
    • 1- 所以,不要标记它final。 2- ActionListener 用于为“接受”操作提供独立于平台的机制。并非所有平台都可以使用“Enter”作为接受键。最好尝试满足最终用户的期望,然后发明新的期望
    • userWord = typingArea.getText().toLowerCase(); 将给出一个编译错误,如果我省略 userWord 必须标记为 final。我想我可以像你建议的那样创建一个全新的类,但我只是想知道是否有一种方法可以从匿名内部类中提取数据而无需创建新类
    • 你声明为类字段了吗?听起来该变量仍被声明为局部变量。看到我的例子了吗? userWord 变量出现在类减速之后,但在任何方法或构造函数之外
    • 我是个白痴......我在构造函数中声明它 - 忘记了内部类的全部意义,所以它们可以访问相同的类字段......再次感谢帮助!最后一个问题 - 我如何连接一个动作侦听器以在按下回车键时触发 actionPerformed .. 你当前的实现似乎没有什么可以触发 ActionEvent
    猜你喜欢
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多