我遇到了错误
我从this site构建的一些代码中的Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Attempt to mutate in notification
。
我制作了GUI,并制作了documentListener
,以便程序知道何时在文本字段中添加了内容。我在handleLetters
方法中收到错误。它应该像链接中的字母一样工作-当我输入一个字母时,我想用A
替换它,如果有意义,它将替换字母放到所有A的位置上吗?
我已经厌倦了谷歌搜索,但似乎无法使其与我的代码一起使用。
public GUI() {
jp.setLayout(Layout);
setTitle("Derp");
System.out.println(size);
setVisible(true);
setSize(700, 100);
setResizable(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel jp1 = new JPanel();
jp1.setLayout(new GridLayout(2, 2));
for (int i = 0; i < size; i++) {
char temp = SubstitutionCipher.newD.toString().charAt(i);
JTextField textField = new JTextField();
textField.setHorizontalAlignment(0);
if ((int) temp == 0) {
textField.setBorder(null);
textField.setEditable(true);
jp1.add(textField);
nums.add(textField);
jp.add(jp1);
} else {
SubstitutionCipher.derp[i] = textField.getText();
jp1.add(textField);
nums.add(textField);
jp.add(jp1);
/* also store textField somewhere else. */
}
textField.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent arg0) {
// TODO Auto-generated method stub
System.out.println("remove");
HandleLetters();
}
@Override
public void insertUpdate(DocumentEvent arg0) {
// TODO Auto-generated method stub
System.out.println("update");
HandleLetters();
}
@Override
public void changedUpdate(DocumentEvent arg0) {
System.out.println("Change");
HandleLetters();
}
});
}
}
jp.add(jb);
add(jp);
}
public Runnable HandleLetters() {
char[] charAry = new char[size];
String[] k = new String[size];
String[] temp = new String[size];
int h;
int cnt = 0;
for (int i = 0; i < size; i++) {
charAry[i] = SubstitutionCipher.newD.toString().charAt(i);
temp[i] = "d";
}
for (h = 0; h < charAry.length; h++) {
k[h] = nums.get(h).getText();
if (h == size - 1) {
for (int i = 0; i < k.length; i++) {
// System.out.println(k[i]);
if ((k[i] == " ")) {
cnt++;
}
}
break;
}
}//here i try to change recurring letters to the wished letter
for (int i = 0; i < charAry.length; i++) {
System.out.println("cnt: " + charAry[cnt]);
System.out.println("i: " + charAry[i]);
if (charAry[cnt] == charAry[(i + 1) % 21]) {
System.out.println(k[cnt]);
nums.get(i).setText("" + k[cnt]);
break;
}
}
return null;
}
public static void main(String[] args) {
SubstitutionCipher.SubstitutionCipher();
GUI t = new GUI();
}
}
所以我想知道我还可以使用其他哪些侦听器,以便我的TextField可以“知道”我输入的Letter,并且程序能够更改其他字母。
最佳答案
尝试使用Windowbuilder。将使您更容易控制UI。
关于java - Java错误尝试在通知中进行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17111222/