-2

我在 此站点上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 将“知道”我输入了一个字母,并且程序能够更改其他字母。

4

1 回答 1

1

尝试使用 Windowbuilder。将使您更轻松地控制 UI。

于 2013-06-27T13:56:26.167 回答