2015-12-02 2 views
1

Я работаю в java swing в netbeans.включить jcombobox без нажатия enter

У меня есть текстовое поле. Я бы хотел, чтобы combobox был включен только в том случае, если текст, написанный в текстовом поле, является большим. Мой код работает, если я нажимаю клавишу ввода. Но я хотел бы, чтобы это сработало, написав текст в текстовом поле. Как я могу это сделать?

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); 
     } 
    } 
}  
+0

См. [Как написать прослушиватель документов] (https://docs.oracle.com/javase/tutorial/uiswing/events/documentlistener.html). –

ответ

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.

+0

private void nmrintervTXTActionPerformed (java.awt.event.ActionEvent evt) { updateTextField (nmrintervTXT, evidenceOtherApplicantsTXT); } public void updateTextField (текстовое поле JTextField, комбобокс JComboBox) { Строка text = textfield.getText(); try { combobox.setEnabled (Integer.parseInt (текст)> 1); } catch (NumberFormatException nfe) { combobox.setEnabled (false); } } – user3343768

+0

Я сделал то, что вы предлагаете, и я передал текстовое поле и поле со списком в качестве параметров. Это все еще не работает. Может быть, я не понимаю! – user3343768

+1

@ user3343768 самой важной частью является 'DocumentListener'. Похоже, что вы все еще используете «ActionListener», который запускает ваш код только при нажатии кнопки ввода. Использование 'DocumentListener' приведет к его обновлению при каждой модификации текста. – resueman

0

См. addCaretListener API.

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

класс 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()); 

Я думаю, что параметр е был в вине в обновлении в MyDocumentListener.

Смежные вопросы