启用jcombobox而不按Enter键

时间:2015-12-02 14:48:40

标签: java swing netbeans jtextfield enter

我正在使用netbeans的java swing。

我有一个文本字段。我希望只有当文本字段中写的文本更强大时才会启用组合框。 如果按下回车键,我的代码就可以工作了。但我想通过在文本字段中写作来使其工作。我怎么能这样做?

 private void nmrintervTXTActionPerformed(java.awt.event.ActionEvent evt) {                                             
    String text = this.nmrintervTXT.getText();
    System.out.println(text);
    if (!text.isEmpty()) {
        if (Integer.parseInt(text) > 1) {
            this.evidenceOtherApplicantsTXT.setEnabled(true);
        }
    }
}       

3 个答案:

答案 0 :(得分:5)

您应该使用DocumentListener,每次文本更改时都会调用它。它看起来像这样:

class MyDocumentListener implements DocumentListener {
    @Override
    public void insertUpdate(DocumentEvent e) {
        update();
    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        update();
    }

    @Override
    public void changedUpdate(DocumentEvent e) {}

    public void update(DocumentEvent e) {
        String text = nmrintervTXT.getText();
        try{
            evidenceOtherApplicantsTXT.setEnabled(Integer.parseInt(text) > 1);
        } catch(NumberFormatException nfe){
            evidenceOtherApplicantsTXT.setEnabled(false);
        }
    }
}

使它成为一个内部类(或者,将文本字段和组合框作为参数传递给构造函数并存储它们),并将其添加到文本字段中,它将检查文本是否大于每次更新文本时都设置一个,并设置组合框是否启用了正确的值。

nmrintervTXT.getDocument().addDocumentListener(new MyDocumentListener());

因此,您需要进行类似的更改(根据代码的实现方式进行调整):

public class MyClass{
    JTextField nmrintervTXT;

    public static void main(String[] args){
        /*
         * Code initializing your gui
         */

         nmrintervTXT = new JTextField();
         nmrintervTXT.getDocument().addDocumentListener(new MyDocumentListener());

         /*
          * The rest of your initialization code
          */
    }

    class MyDocumentListener implements DocumentListener {
        /*
         * Implementation from above
         */
    }
}

有关详细信息,请参阅Oracle's tutorial on the subject

答案 1 :(得分:0)

请参阅addCaretListener API。

textfield.addCaretListener(new CaretListener() {
    @Override
    public void caretUpdate(CaretEvent e) {
        System.out.println("caretUpdate with new text: "+textfield.getText());
    }
});

答案 2 :(得分:0)

class MyDocumentListener实现了DocumentListener {

    @Override
    public void insertUpdate(javax.swing.event.DocumentEvent e) {
        update(e);
    }

    @Override
    public void removeUpdate(javax.swing.event.DocumentEvent e) {
        update(e);
    }

    @Override
    public void changedUpdate(javax.swing.event.DocumentEvent e) {
    }

    public void update(javax.swing.event.DocumentEvent e) {
        String text = nmrintervTXT.getText();
        try {
            evidenceOtherApplicantsTXT.setEnabled(Integer.parseInt(text) > 1);
        } catch (NumberFormatException nfe) {
            evidenceOtherApplicantsTXT.setEnabled(false);
        }
    }
}

public MyClass() {
    initComponents();
}

@SuppressWarnings("unchecked")
    nmrintervTXT = new javax.swing.JTextField();

    nmrintervTXT.getDocument().addDocumentListener(new MyDocumentListener());

我认为参数e在MyDocumentListener的更新中出错了。