【问题标题】:Trigger event while typing in a JTextComponent java在输入 JTextComponent java 时触发事件
【发布时间】:2015-02-26 10:06:13
【问题描述】:

我有一个Settings 类,它应该提供用于检索设置并将它们保存到文件的接口。我的设置应该在我更改输入值时更新(而不是在单击保存按钮之后)。这就是为什么我将此方法添加到Settings 类:

  /** Automatically update setting value as user types.
   * @param setting_name What is the name of associated setting?
   * @param input JTextComponent (like JTextField) to listen on for events
   */
  public void listenOnInput(final String setting_name, final JTextComponent input) {
    //Debug output
    System.out.println("Settings[\""+setting_name+"\"] automatically updates on input change.");
    input.addInputMethodListener(new InputMethodListener() {
      @Override
      public void inputMethodTextChanged(InputMethodEvent event) {
        //Set setting to current value
        setSetting(setting_name, input.getText());
      }
      //This method is dummy, I see no use for it
      @Override
      public void caretPositionChanged(InputMethodEvent event) {}
    });
  }

这可能不是完美的设计,但我的应用程序永远不会有复杂的设置,因此我不会在这项任务上投入太多精力。我是这样使用的:

    JTextField name = new JTextField();
    Settings settings = new Settings();
    name.setToolTipText("Enter your name");
    contentPane.add(name);
    settings.listenOnInput("user_name", name);

我的问题是上面的代码不起作用 - 我可以输入或按 Enter 但永远不会调用 inputMethodTextChanged

那么获取更新值的正确方法是什么?

【问题讨论】:

  • 我不相信JTextField 支持InputMethodListener,你应该考虑使用DocumentListenerInputVeriferFocusListener
  • 但是JTextFieldJTextComponent中的方法都不支持这个监听器。
  • JTextField#getDocument,见Implementing a Document Filter
  • 你在用什么IMEInputMethodListener 在我输入日文字符时效果很好。
  • @aterai 我只是输入 - 我预计这应该会触发那个似乎不是真的事件。

标签: java swing events jtextfield jtextcomponent


【解决方案1】:

JTextField 的文档上使用DocumentListener

textField.getDocument().addDocumentListener(...);

然后您可以使用它来检测文本中的任何变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2016-03-13
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多