我正在製作一個UI,其中有兩個jtextfields。我想要的是,當用戶在第一個 jtextfield中輸入時,它應該在第二個jtextfield中以1爲增量進行鏡像,並且如果用戶 在第二個JtextField中輸入,它應該在第一個jtextfield中鏡像,其減量爲 。但是我獲取像IllegalStateException的錯誤:嘗試在通知中進行變異。如何從另一個JtextField更新JTextField
示例代碼:
public class Sh extends JFrame
{
public Sh()
{
super("SH");
JPanel panel = new JPanel();
getContentPane().add(panel, BorderLayout.NORTH);
final JTextField field = new JTextField(10);
panel.add(field);
final JTextField field1 = new JTextField(10);
panel.add(field1);
DocumentListener docListener = new DocumentListener(){
@Override
public void changedUpdate(DocumentEvent e) {
updateLabel(e);
}
@Override
public void insertUpdate(DocumentEvent e) {
updateLabel(e);
}
@Override
public void removeUpdate(DocumentEvent e) {
updateLabel(e);
}
private void updateLabel(DocumentEvent e) {
String text = field.getText();
String text1 = field1.getText();
if (!text.isEmpty()) {
int p = Integer.parseInt(text);
int i = (p + 1);
String s = String.valueOf(i);
field1.setText(s);
} else if (!text1.isEmpty()) {
int p = Integer.parseInt(text1);
int i = (p - 1);
String s = String.valueOf(i);
field.setText(s);
}
}
};
field.getDocument().addDocumentListener(docListener);
field1.getDocument().addDocumentListener(docListener);
DocumentFilter docFilter = new DocumentFilter(){
@Override
public void insertString(FilterBypass fb, int off, String str, AttributeSet attr)
throws BadLocationException {
fb.insertString(off, str.replaceAll("\\D++", ""), attr); // remove non-digits
}
@Override
public void replace(FilterBypass fb, int off, int len, String str, AttributeSet attr)
throws BadLocationException {
fb.replace(off, len, str.replaceAll("\\D++", ""), attr); // remove non-digits
}
};
((AbstractDocument) field.getDocument()).setDocumentFilter(docFilter);
((AbstractDocument) field1.getDocument()).setDocumentFilter(docFilter);
}
public static void main(String[] args)
{
Sh s = new Sh();
s.setDefaultCloseOperation(EXIT_ON_CLOSE);
s.pack();
s.setVisible(true);
}
}
您無法修改已修改的文檔。雖然使用單個偵聽器的想法是一個好主意,但您需要確定此偵聽器將更新的字段,並且它應該附加到其他 – MadProgrammer 2014-10-09 09:38:50