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 では機能しないそれらに対して消費メソッドを使用する必要があるため、それを行うことはできません。