如果第一个文本字段不为空,则java启用第二个文本字段

时间:2014-03-28 10:45:19

标签: java jtextfield

我的项目中有2个文本字段。第一个文本字段是txtNumA,第二个是txtNumB。我禁用了txtNumB。当txtNumA不为空时,将启用txtNumB。

嗯,这是我尝试过的代码的一部分:

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。

我的代码出了什么问题?

3 个答案:

答案 0 :(得分:3)

这里发生的是,

如果KeyTypedKeyPressed事件仍然没有给TextField提供输入。这就是为什么它不起作用并且在你键入第二个字符后工作,那时第一个字符必须有到达TextField.So使用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);
        }
    });

答案 1 :(得分:1)

正确的方法是向DocumentListenerDocument添加JTextField

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 正确。

进一步阅读:

答案 2 :(得分:0)

我认为这适用于2个字符的问题是因为getText()方法返回未更新的值,即它在更改之前返回值。你需要做的是在将它与空字符串进行比较之前以某种方式更新该值。

您可能需要调查KeyEvent以查看用户是否添加了其他字符,例如退格...