JTextField 的动作侦听器在第一个 "use" 之后失败
Action Listener for a JTextField fails after first "use"
我正在尝试创建一个小程序,您必须在看到匹配的字谜时猜测单词。我的代码是这样的:
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("");
}
}
现在,当我执行它时,它第一次工作(当您输入正确的单词并按回车键时,会显示一个新的字谜并且输入字段会被清除),但之后它会中断并且回车不再执行任何操作.
我究竟做错了什么?任何帮助将不胜感激。
Pair now = woerter.shuffle();
您正在将 "now" 定义为局部变量。
now = woerter.shuffle();
但是你在你的nextWord(…)
方法中也引用了它,这表明你也将它定义为静态变量。
不要定义变量两次。去掉局部变量:
//Pair now = woerter.shuffle();
now = woerter.shuffle();
此外,将方法和变量定义为静态表示设计不佳。您的 nextWor() 方法不应该是静态的,因此 "now" 变量不需要是静态的。
阅读 How to Use Text Fields 上的 Swing 教程部分。 TextDemo
代码将向您展示如何更好地构建代码,以便文本字段的 ActionListener 可以访问文本字段和 class 中的其余数据。
所以下载工作演示代码并修改它以满足您的要求。
我正在尝试创建一个小程序,您必须在看到匹配的字谜时猜测单词。我的代码是这样的:
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("");
}
}
现在,当我执行它时,它第一次工作(当您输入正确的单词并按回车键时,会显示一个新的字谜并且输入字段会被清除),但之后它会中断并且回车不再执行任何操作. 我究竟做错了什么?任何帮助将不胜感激。
Pair now = woerter.shuffle();
您正在将 "now" 定义为局部变量。
now = woerter.shuffle();
但是你在你的nextWord(…)
方法中也引用了它,这表明你也将它定义为静态变量。
不要定义变量两次。去掉局部变量:
//Pair now = woerter.shuffle();
now = woerter.shuffle();
此外,将方法和变量定义为静态表示设计不佳。您的 nextWor() 方法不应该是静态的,因此 "now" 变量不需要是静态的。
阅读 How to Use Text Fields 上的 Swing 教程部分。 TextDemo
代码将向您展示如何更好地构建代码,以便文本字段的 ActionListener 可以访问文本字段和 class 中的其余数据。
所以下载工作演示代码并修改它以满足您的要求。