2014-03-28 73 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添加到您的文本字段,如果你有兴趣的变化其内容

延伸阅读:

相关问题