【问题标题】:Refreshing a label through jtextfield通过 jtextfield 刷新标签
【发布时间】:2013-12-06 19:56:13
【问题描述】:

我正在为一个班级开发一个项目,但我想出了一个停顿。 所以,我想要做的是当用户在文本字段中按下回车键以验证 ID 时刷新标签。

这是我在按下“回车”键时要捕获的代码,它是文本字段“txtNbi”的事件:

if (evt.getKeyCode() == 10) {
    this.BI = txtNbi.getText();
    String BIs[];
    BIs = DadosAplicacao.getInstance().getBIs();
    for (int i = 0; i < BIs.length; i++) {
        System.out.println("BI: " + this.BI + "\nBIlista: " + BIs[i]);
        if (this.BI.equals(BIs[i])) {
            encontrou.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pt/estg/dint/imagens/Ok.png")));
            this.repaint();
        } else {
            encontrou.setIcon(new javax.swing.ImageIcon(getClass().getResource("/pt/estg/dint/imagens/Cross.png")));
            this.repaint();
        }
    }
}

txtNbi = 我的文本字段的名称;
BIs = 从“DadosAplicacao”类中获取预插入 ID 的字符串数组;
encontrou = 以图标形式接收图像的标签名称

这是我的问题:

我有以下数据:
- BIs[0] = 12345678
- BIs[1] = 87654321
- BIs[2] = 54321678

当我输入前两个时,标签不会变为“Ok.png”图标,但当我输入最后一个时,标签会将其图标变为“Ok.png”!

谁能帮我解决这个问题?

【问题讨论】:

  • 不要使用 KeyListener,很可能是按键被字段消耗了,改为使用 ActionListener

标签: java jlabel jtextfield


【解决方案1】:

你需要使用 DocumentListener 类:

txtNbi.getDocument().addDocumentListener(new DocumentListener() {
     public void changedUpdate(DocumentEvent documentEvent) {
     //add the code handling the different conditions here
     }
});

【讨论】:

    【解决方案2】:

    找到键入的 ID 后,您需要一个 break

    if(this.BI.equals(BIs[i]))
    {
        encontrou.setIcon(newjavax.swing.ImageIcon(getClass().getResource("/pt/estg/dint/imagens/Ok.png")));
        this.repaint();
        break;
    }
    

    【讨论】:

    • 非常感谢!有用!但是休息在那里做什么?你能解释一下吗?
    • 您可以使用未标记的中断来立即终止 for、while 或 do-while 循环。在您的情况下,您需要找到一个特定的 ID,当您找到它时,您必须更改图标然后停止。因为如果您继续将其他数组元素与所需的 ID 进行比较,您将始终从 this.BI.equals(BIs[i]) 得到“false”,因此您的代码会将图标重新更改为 Cross .png。
    猜你喜欢
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多