我收到了错误
我在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就会“知道”我写了一封信,并且该程序能够更改其他字母。
答案 0 :(得分:1)
尝试使用Windowbuilder。将使您更容易控制UI。