我正在使用netbeans的java swing。
我有一个文本字段。我希望只有当文本字段中写的文本更强大时才会启用组合框。 如果按下回车键,我的代码就可以工作了。但我想通过在文本字段中写作来使其工作。我怎么能这样做?
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 :(得分: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。
答案 1 :(得分:0)
请参阅addCaretListener API。
textfield.addCaretListener(new CaretListener() {
@Override
public void caretUpdate(CaretEvent e) {
System.out.println("caretUpdate with new text: "+textfield.getText());
}
});
答案 2 :(得分:0)
class 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());
我认为参数e在MyDocumentListener的更新中出错了。