如果要監視更改到一個或多個文本字段,你應該使用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