JTextField的Action Listener在第一次 "使用 "后失效

问题描述 投票:0回答:1

我想创建一个小程序,在这个程序中,你必须猜测单词,同时你会看到一个匹配的字谜。我的代码是这样的。

        JFrame frame = generateJFrame(BACKGROUND, FOREGROUND);
        JLabel display = generateDisplay(BACKGROUND, FOREGROUND);

        Pair now = woerter.shuffle();
        display.setText(now.getAnagram());

        JTextField input = generateInputBox(BACKGROUND, FOREGROUND);
        ActionListener action = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                nextWord(now, woerter, display, input);
            }
        };

        input.addActionListener(action);
[...] 
        private static void nextWord(Pair now, Woerter woerter, JLabel display, JTextField input) {
            if (now.getRealWord().equalsIgnoreCase(input.getText())) {
            now = woerter.shuffle();
            display.setText(now.getAnagram());
            input.setText("");
            }
        }

现在当我执行它的时候,它第一次工作(当你输入正确的单词并按下回车键,一个新的字谜就会显示出来,并且输入框会被清除),但是之后它就会中断,回车键也没有任何作用了。 我到底做错了什么?任何帮助都将是感激的。

java swing actionlistener jtextfield
1个回答
1
投票
Pair now = woerter.shuffle();

你将 "now "定义为一个局部变量。

now = woerter.shuffle();

但你也在你的 nextWord(…) 方法,这表明你也将其定义为静态变量。

不要两次定义变量。把局部变量去掉。

//Pair now = woerter.shuffle();
now = woerter.shuffle();

另外,把方法和变量定义为静态,说明设计得不好。你的nextWor()方法不应该是静态的,因此 "now "变量也不需要是静态的。

请阅读Swing教程中关于 如何使用文本字段. 该 TextDemo 代码将告诉你如何更好地组织你的代码,以便文本字段的ActionListener可以访问文本字段和类中的其他数据。

所以下载工作演示代码,并修改它以满足你的要求。

© www.soinside.com 2019 - 2024. All rights reserved.