【问题标题】:Apply .addKeyListener to array of JTextFields将 .addKeyListener 应用于 JTextFields 数组
【发布时间】:2012-08-07 00:16:12
【问题描述】:

我写了下面的代码。它检查来自 JTextField 的输入并确保用户正在输入数字。如果不是,该框会闪烁红色并删除无效字符。

tipArray[] 是一个 JTextField 数组,我通过循环将其添加到 JFrame。

如何将以下代码应用于每个可能的数组(tipArray[0]、tipArray[1] ....tipArray[6])?

tipArray[6].addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
    char keyChar = e.getKeyChar();;
    char[] badCharArray = "abcdefghijklmnopqrstuvwxyz-`~!@#$%^&*()[,]{}<>_+=|\"':;?/ ".toCharArray();
        for (int i = 0; i < badCharArray.length; i++) {
            if (badCharArray[i] == keyChar) {
                tipArray[1].setBackground(Color.RED);
                }
                } 
            }
@Override
public void keyReleased(KeyEvent e) {
    if (tipArray[6].getBackground() == Color.RED) {
        if (tipArray[6].getText() != "0"){
            String removeLastLetter = tipArray[1].getText().substring(0, tipArray[6].getText().length()-1);
            tipArray[6].setText(removeLastLetter);
            tipArray[6].setBackground(Color.WHITE);
        }
    }
}

});

我试过的循环不起作用:

for (int i = 0; i <= 6; i++) {
tipArray[i].addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
    char keyChar = e.getKeyChar();;
    char[] badCharArray = "abcdefghijklmnopqrstuvwxyz-`~!@#$%^&*()[,]{}<>_+=|\"':;?/ ".toCharArray();
        for (int x = 0; x < badCharArray.length; x++) {
            if (badCharArray[x] == keyChar) {
                tipArray[i].setBackground(Color.RED);
                }
                } 
            }
@Override
public void keyReleased(KeyEvent e) {
    if (tipArray[i].getBackground() == Color.RED) {
        if (tipArray[i].getText() != "0"){
            String removeLastLetter = tipArray[i].getText().substring(0, tipArray[i].getText().length()-1);
            tipArray[i].setText(removeLastLetter);
            tipArray[i].setBackground(Color.WHITE);
        }
    }
}

});

}

^以上结果导致“if (badCharArray[x] == keyChar) {”行之后的所有变量 i 都有语法错误。

【问题讨论】:

  • “确保用户输入数字” 考虑使用 DocumentFilter/DocumentListenerJFormattedTextField 或(最好的 IMO)JSpinner SpinnerNumberModel。每次看到KeyListener 都会让我觉得必须有更好的方法..

标签: java swing event-handling jtextfield


【解决方案1】:

将第二个 for 循环中的计数器更改为不同的变量(可能是 z 而不是 i)。您现在有一个重复的变量(两个 i)。此外,建议您使用 DocumentListener 而不是 KeyListener 来检查无效字符,因为 KeyListener 有时会失败。

【讨论】:

  • DocumentFilter 发现比 DocumentListener 更好,但仍然比 KeyListener 好一百万倍
  • 呵呵,在这里听你的建议,然后你去改变我:P 但是好吧
  • 我的第二个 for 循环使用了不同的变量 x,我将在完成此工作后检查 Document Listener。谢谢。
  • @DavidTunnell 哦,对不起,不知何故误读了,您需要将计数器“i”设为 final
猜你喜欢
  • 2012-01-19
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2011-08-15
  • 2013-03-14
  • 2020-03-26
相关资源
最近更新 更多