2012-05-18 1 views
1

Я хочу создать метод, который бы сортировал анализ String и всякий раз, когда найден текстовый текст (/r, чтобы повернуть текст красным, например), текстовая команда не отображается и ее применяется к тексту, следуя команде.Выполнение текстовых команд, таких как окрашивание текста

Например, строка:

"Hello /rworl/bd" 

Выходной сигнал будет выглядеть следующим образом:

"Hello world" 

но "Hello worl" будет красным цветом и окончательный d будет синим. Я знаю, как изменить цвет текста, сделать его полужирным и т. Д.

Что такое хороший способ выбрать текст после команды?

+1

Если регулярное выражение не работает, то, что включает в себя и мы можем предложить предложение. – Jivings

+0

Извините, JTextArea. Я редко использую регулярное выражение, поэтому я сначала подумал о преобразовании строки в массив и использовании цикла for, но, возможно, это намного проще, поэтому я публикую здесь. –

ответ

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 является компонентом для простого текста. Один шрифт, стиль & размер, & можно задать один цвет переднего плана и фона. Для отформатированного uneditable текст, используйте JLabel как предложено @Glitch. Для редактируемый текст, используйте компоненты, такие как JEditorPane или JTextPane.

См. Раздел How to Use Editor Panes and Text Panes в разделе учебника для: дальнейших подробностей, рабочего кода. & милые скриншоты. :)

enter image description here

Смежные вопросы