我有簡單的文本編輯器,它將JAVA關鍵字藍色。這是代碼:JTextPane中的字母延遲着色
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」它不會使它變成藍色,但是當我輸入一個更多的字符「int」時將會變成藍色,例如。 「intR」,「int」將變成藍色,R字母變成黑色。如何預防它?一種解決方案是用keyReleased替換keyTyped,但我不能這樣做,因爲我打算做一些事情,而ENTER和TAB被按下,我需要使用它們的消費方法,這對keyReleased不起作用。