我的项目中有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。
我的代码出了什么问题?
答案 0 :(得分:3)
这里发生的是,
如果KeyTyped
和KeyPressed
事件仍然没有给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)
正确的方法是向DocumentListener
的Document
添加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
以查看用户是否添加了其他字符,例如退格...