2012-05-18 29 views
1

我想製作一種方法來分析String,並且每當發現文本命令(例如,/r將文本變成紅色)時,文本命令不會顯示,並且其文本命令應用於命令後面的文本。製作文本命令,如爲文本着色

例如,字符串:

"Hello /rworl/bd" 

輸出將是如下:

"Hello world" 

"Hello worl"將是紅色文本和最終d將是藍色。我知道如何更改文本顏色,使其變爲粗體等。

什麼是在命令後選擇文本的好方法?

+1

如果您正則表達式不工作,則包括,我們可以給您一個建議。 – Jivings

+0

對不起,JTextArea。 我急於使用正則表達式,所以我首先想到了將字符串轉換爲數組並使用for-loop,但是可能更簡單一些,這就是爲什麼我要在這裏發佈。 –

回答

2

我找不到在JTextArea上使用多種字體的好方法,但這裏使用的是標籤和html。當你輸入的字母會變成黑色。如果按'/',它將等待文本字符決定顏色。如果您再按'r',則以下字母的字體將設置爲紅色,'b'爲藍色。

public class TextColour implements KeyListener { 
    JLabel label; 
    String red = "<font color='FF0000'>"; 
    String blue = "<font color='0000FF'>"; 
    String text = ""; 
    boolean colour = false; 

    public static void main(String[] args) { 
     new TextColour(); 

    } 

    public TextColour() { 
     JFrame frame = new JFrame(); 
     JTextArea area = new JTextArea(); 

     area.addKeyListener(this); 
     label = new JLabel(); 

     frame.setPreferredSize(new Dimension(400, 100)); 
     frame.getContentPane().add(area); 
     frame.getContentPane().add(label); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    @Override 
    public void keyPressed(KeyEvent key) { 
     char letter = key.getKeyChar(); 
     if (colour) { 
      if (letter == 'r') { 
       text += red; 
      } else if (letter == 'b') { 
       text += blue; 
      } 
      colour = false; 
     } else if (letter == '/') { 
      colour = true; 
     } else { 
      text += key.getKeyChar(); 
     } 
     label.setText("<html>" + text + "</html>"); 
    } 

    @Override 
    public void keyReleased(KeyEvent arg0) { 
    } 

    @Override 
    public void keyTyped(KeyEvent arg0) { 
    } 
} 
1

JTextArea是純文本的組件。一個單一的字體,樣式&大小,&一個前景和背景顏色可以設置。對於格式化的不可編輯的文本,請使用@Glitch建議的JLabel。對於可編輯的文本,請使用組件JEditorPaneJTextPane

查看本教程的How to Use Editor Panes and Text Panes部分:進一步的細節,工作代碼.. &可愛的屏幕截圖。 :)

enter image description here