如果要监视更改到一个或多个文本字段,你应该使用DocumentListener
,这也将为你提供在用户通知的粘贴文本字段或字段被编程改变(通过调用setText
)
例如...
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
public class Text {
public static void main(String[] args) {
new Text();
}
public Text() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
JTextField field1 = new JTextField(10);
JTextField field2 = new JTextField(10);
JTextField field3 = new JTextField(10);
DocumentListener dl = new DocumentListener() {
@Override
public void insertUpdate(DocumentEvent e) {
updateFieldState();
}
@Override
public void removeUpdate(DocumentEvent e) {
updateFieldState();
}
@Override
public void changedUpdate(DocumentEvent e) {
updateFieldState();
}
protected void updateFieldState() {
String text = field1.getText() + " " + field2.getText();
field3.setText(text);
}
};
field1.getDocument().addDocumentListener(dl);
field2.getDocument().addDocumentListener(dl);
field3.setEditable(false);
add(field1);
add(field2);
add(field3);
}
}
}
现在,您似乎试图限制可以输入到字段中的字符。您可以使用JSpinner
或JFormattedTextField
,但这些仅提供后验证。
对于实时验证,您应该使用DocumentFilter
,这将允许您在将其应用于底层Document
之前拦截在该字段中输入的内容。
见Implementing a DocumentFilter
和DocumentFilter
examples更多细节
请基调不太讨厌...这是令人沮丧的人回答它。编辑问题并明确你的问题。 – deezy
还提到您正在获取什么错误并尽可能附加错误日志 – user3653796
使用DocumentFilter控制可以在字段中输入的内容以及用于监视更改的DocumentListener。看看[实现文档过滤器](http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#filter),[DocumentFilter Examples](http://www.jroller.com/dpmihai/entry/documentfilter)和[侦听文档更改](http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html#doclisteners)以获取更多详细信息 – MadProgrammer