0

JAVA キーワードを青く着色するシンプルなテキスト エディタがあります。これはコードです:

class MainPanel extends JPanel {

    private int WIDTH = 800;
    private int HEIGHT = 500;
    private JFrame frame;
    private JTextPane codePane = new JTextPane();
    private StyledDocument doc = codePane.getStyledDocument();

    MainPanel(JFrame frame) {
        this.frame = frame;
        setPreferredSize(new Dimension(WIDTH, HEIGHT));
        setLayout(new BorderLayout());
        JScrollPane scroll = new JScrollPane(codePane);
        add(scroll, BorderLayout.CENTER);
        codePane.addKeyListener(new MainPanel.KeyHandler());
        codePane.setFont(new Font("Monospaced", Font.PLAIN, 15));
        //Loading key words..
        //...
    }

    private class KeyHandler extends KeyAdapter {

        @Override
        public void keyTyped(KeyEvent ev) {
            String code = codePane.getText();
            SimpleAttributeSet set = new SimpleAttributeSet();
            StyleConstants.setForeground(set, Color.BLACK);
            doc.setCharacterAttributes(0, code.length(), set, true);
            //Change keywords color
            int lastIndex = 0;
            for (int a = 0; a < words.length; a++) {
                set = new SimpleAttributeSet();
                if (Arrays.asList(keywords).contains(words[a])) {
                    StyleConstants.setForeground(set, Color.BLUE);
                }
                doc.setCharacterAttributes(lastIndex, words[a].length(), set, true);
                lastIndex += words[a].length() + 1; //+1 bo jeszcze spacja po słowie
            }
        }
    }
}

私の問題は、テキスト領域に文字を配置する前に (keyTyped イベントで) テキストの強調表示が行われることです。したがって、「int」と入力すると青く色付けされませんが、もう1文字「int」と入力すると青く色付けされます。「intR」、「int」は青色、R の文字は黒色になります。それを防ぐ方法は?1 つの解決策は、keyTyped を keyReleased に置き換えることですが、キーが押されている間ENTERにいくつかのことを行う予定TABであり、keyReleased では機能しないそれらに対して消費メソッドを使用する必要があるため、それを行うことはできません。

4

2 に答える 2

2

1 つの解決策は、keyTyped を keyReleased に置き換えることです。

KeyListener を使用しないでください。DocumentListener を使用する必要があります。詳細については、ドキュメント リスナーの作成方法に関する Swing チュートリアルのセクションを参照してください。

ENTER と TAB を押しながら何かをする予定です

キーバインディングを使用する必要があります。上記のリンクから目次を見ると、 に関するセクションが見つかりますHow to Use Key Bindings

于 2013-03-04T17:43:55.817 に答える