如何在DocumentListener运行时删除JTextField的内容?

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

对于以下代码,我得到了IllegalStateException(试图在通知中进行更改):

private class DocumentHandler implements DocumentListener {
    public void changedUpdate(DocumentEvent ev) {
        // unused
    }
    public void insertUpdate(DocumentEvent ev) {    
        if(textInput.getText().equals("...")) {
        JOptionPane.showMessageDialog(null, "...");
        textInput.setText("");
    }
}

为什么在DocumentListener处于活动状态时不能更改TextField?

我试图在TextField设置为“”时删除DocumentListener,但这根本没有帮助。我知道以前有人问过一个非常类似的问题,但我没有得到答案...

谢谢

java jtextfield illegalstateexception documentlistener
1个回答
0
投票

通常,您不会-在聆听文档时不会更改其状态。我知道的两种可能的解决方案:

  • 从您的侦听器中,将更改放入Runnable,并通过调用SwingUtilities.invokeLater(yourRunnable)将Runnable排队到Swing事件线程中。这是一个无耻的恶棍
  • 更好:不使用DocumentListener而是使用DocumentFilter,因为这种类型的侦听器旨在在组件中可视化文本之前对Document进行更改。
© www.soinside.com 2019 - 2024. All rights reserved.