【问题标题】:Listeners and their objects听众和他们的对象
【发布时间】:2012-06-09 18:48:44
【问题描述】:

我有一个 JTextField,带有一个更改文本事件的侦听器。

我可以使用这个监听器来影响它正在监听的同一个对象吗?例如,如果它检测到“有问题的”更改,它应该删除同一个 JTextField 对象中的所有文本。

这可能吗?好像不行……

一个例子如下: .

this.txtSearch.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
    validate();
}

public void removeUpdate(DocumentEvent e) {
    validate();
}

public void insertUpdate(DocumentEvent e) {
    validate();
}

private void validate(){
    if not_good(txtSearch.getText()) {
        txtSearch.setText("");
    }
}

【问题讨论】:

  • “好像不行……” 也许是放假了。为了尽快获得更好的帮助,请发帖SSCCE
  • 这个用例可能需要JFormattedTextField。详情请见How to Use Formatted Text Fields
  • “例如,如果它检测到“有问题”的更改,它应该删除同一个 JTextField 对象中的所有文本。” 所以.. 如果我输入了 55字符正确但第 56 个无效,我丢失了 55 个正确字符?那是苛刻。
  • @Andrew:重点是:这样的事情可能吗?

标签: java swing awt jtextfield documentlistener


【解决方案1】:
  • 对于JTextComponent,您必须使用可以访问其Model的正确方法

  • DocumentModel 对应于 JTextComponent

对于键盘输出,您有两个选择

  • 对于从 JTextComponent 到外部(到 Swing GUI 中的另一个元素)的输出,请使用 DocumentListener

  • 对于changes/filtering/modifyJTextComponent内使用DocumentFilter

【讨论】:

    【解决方案2】:

    textChanged 事件更改JTextField 中的文本可能会导致textChanged 事件的(可能无限)循环。不要那样做。

    如果您想验证JTextField 的输入,请使用InputVerifier

    javadoc 包含some examples of how to use it,看看吧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-02
      • 2012-10-23
      • 2020-09-28
      • 2014-08-23
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      相关资源
      最近更新 更多