2014-03-28 75 views
0

我的項目中有2個文本框。第一個文本域是txtNumA,第二個域是txtNumB。我禁用了txtNumB。當txtNumA不爲空時,txtNumB將被啓用。如果第一個文本框不爲空,java啓用第二個文本框

好了,這是我試過的代碼部分:

private void txtNumKeyTyped(java.awt.event.KeyEvent evt) {         
    if(!(txtNumA.getText().trim().equals(""))){ 
     txtNumB.setEnabled(true); 
    } 
    else { 
     txtNumB.setText(null); 
     txtNumB.setEnabled(false); 
    } 
} 

其實它的工作原理,但並不完美。它只有在txtNumA中輸入2個或更多字符時才起作用。我需要的是當我鍵入一個字符和更多時,txtNumB將被啓用。

我的代碼有什麼問題?

+0

我不是Java程序員自己,但我認爲是起訴可能是您的事件在*文本字段正在更新之前被稱爲*。只要刪除'txtNumA'中的所有文字,'txtNumB'消失,還是需要額外加一次時間才能隱藏它? –

回答

3

這裏發生的事情是,

KeyTypedKeyPressed事件情況下,輸入是不是還給予TextField.That就是爲什麼它不工作,你鍵入第二個字符後的工作和到那時第一個字符必須已經到達TextField。所以使用KeyReleased方法來處理這種情況。

t是第一個TextField,而t1是第二個。

t.addKeyListener(new KeyListener(){ 

     @Override 
     public void keyTyped(KeyEvent e) { 

     } 

     @Override 
     public void keyPressed(KeyEvent e) { 

     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
      JTextField bt = (JTextField)e.getSource(); 
      if(bt.getText().trim().length()>0){ 
       t1.setEnabled(true); 
      } 
      else 
       t1.setEnabled(false); 
     } 
    }); 
0

我認爲這個問題與2個字符的工作是因爲getText()方法返回未更新的值,即它返回值的變化之前。你需要做的是以某種方式更新該值,然後再將其與空字符串進行比較。

您可能需要調查KeyEvent以查看用戶是否添加了另一個字符,或者是否是例如退格...

1

正確的方法是將一個DocumentListener增加的DocumentJTextField

public final class TextFieldListener implements DocumentListener { 
    public static void main(final String... args) { 
     SwingUtilities.invokeLater(() -> new TextFieldListener().go()); 
    } 

    private final JFrame frame = new JFrame(); 
    private final JTextField field = new JTextField(); 
    private final JTextField field2 = new JTextField(); 

    private TextFieldListener() { 
     field.getDocument().addDocumentListener(this); 
     frame.setLayout(new GridLayout(2, 0)); 
     frame.add(field); 
     frame.add(field2); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     onFieldUpdated(); 
    } 

    private void go() { 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 

    private void onFieldUpdated() { 
     setField2Enabled(!field.getText().isEmpty()); 
    } 

    private void setField2Enabled(final boolean enabled) { 
     field2.setEnabled(enabled); 
    } 

    @Override 
    public void insertUpdate(final DocumentEvent e) { 
     onFieldUpdated(); 
    } 

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

    @Override 
    public void changedUpdate(final DocumentEvent e) {} 
} 

這是正確的KeyListener添加到您的文本字段,如果你有興趣的變化其內容

延伸閱讀:

相關問題