2014-08-29 110 views
-3

我正在爲代碼編輯器編寫腳本,我想要動態命令。如何動態更改JTextArea中的字體顏色?

所以,如果用戶鍵入「class」,它將改變「class」的顏色。

我該怎麼做?

// This is the main focus part of the code. 

textarea.addKeyListener(new KeyAdapter() { 
     public void keyPressed(KeyEvent evt) { 
      word += evt.getKeyChar(); 

      if(evt.getKeyCode() == KeyEvent.VK_ENTER) { 
       word = ""; 
       line = ""; 
       lineInMemory = line; 
      } 

      if(evt.getKeyCode() == KeyEvent.VK_SPACE) { 
       word = word.replaceAll("null",""); 
       line += word; 
       word = ""; 
       String text = textarea.getText(); 
       String[] words = line.split(" "); 

       if(word.toLowerCase().equals("class")) { 

        // What the heck do I put here?! 

       }  
      } 
     } 
    }); 

我已經擁有了讀鍵的關鍵聽衆,將它們放入單詞中,然後將單詞放入句子中。我希望它能夠輸入關鍵字,並且它在鍵入時會自動更改關鍵字的顏色,有點像Sublime Text的功能。

+0

歡迎來到StackOverflow,我們不是您可能會看到的代碼工廠。您應該發佈您的代碼或至少一個[最小示例](http://stackoverflow.com/help/mcve),以便我們可以複製粘貼並幫助您。如果你沒有表現出任何努力來解決它,那麼我認爲任何人都不會試圖用這個來幫助你。 – Frakcool 2014-08-29 17:16:36

+0

是的,我正在編輯文章,因爲你發佈它。謝謝! – mgthomas99 2014-08-29 17:21:35

回答

1

A JTextArea僅用於包含純文本,並且不能顏色某些單詞。如果您想要爲不同的單詞着色,則需要使用JTextPaneJEditorPane

欲瞭解更多信息,請參閱此question。這question可能也有幫助(尤其是第二個答案)。

下面是一個例子:

JTextPane textPane = new JTextPane(); 
StyledDocument doc = textPane.getStyledDocument(); 

Style style = textPane.addStyle("Style", null); 
StyleConstants.setForeground(style, Color.red); 
String word = "Hello"; 

if (word.equals("Hello")) { 
    try { 
     doc.insertString(doc.getLength(), word, style); 
    } catch (BadLocationException ex) { 
     ex.printStackTrace(); 
    } 
} else { 
    StyleConstants.setForeground(style, Color.blue); 

    try { 
     doc.insertString(doc.getLength(), word, style); 
    } catch (BadLocationException e) { 
     e.printStackTrace(); 
    } 
} 

這使得一個字符串word。如果單詞是"Hello",它將顯示爲紅色,否則將顯示爲藍色。

+0

謝謝你,但它似乎是拋出一個錯誤。錯誤出現在你提交的代碼的第5行,它表示「StyleConstants.setForeground(style,Color.red);」我不知道爲什麼。我可能錯過了一些顯而易見的東西,但我對GUI編程相對較新。有什麼建議麼? – mgthomas99 2014-08-29 18:08:41

+0

究竟是拋出的錯誤是什麼? – Zach 2014-08-29 19:17:45

+0

異常在線程「主要」 java.lang.Error的:未解決的編譯問題: \t令牌(S)語法錯誤,錯位構建體 \t令牌語法錯誤「(」刪除此令牌 \t語法錯誤上令牌「)」,無效VariableDeclarator – mgthomas99 2014-08-29 19:23:46