键入JTextComponent java时触发事件

时间:2015-02-26 10:06:14

标签: java swing events jtextfield jtextcomponent

我有一个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

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

1 个答案:

答案 0 :(得分:1)

DocumentListener的文档中使用JTextField

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

然后,您可以使用它来检测文本中的任何更改。