2013-08-13 2 views
2

Есть ли способ, чтобы выделить или изменить цвет строки, которая добавляется из строки [] в JTextArea? В настоящее время я использую DefaultHighlighter с помощью метода addHighlighter (from, to, highlighter), но это не работает так, как нужно. Строка [] поступает из списка, в котором записывается ключ imput, и «хочу, чтобы каждая строка отдельной строки была выделена цветом.Окраска строки перед добавлением ее в JTextArea

Пример того, как выглядит JTextArea: A B C D E F G [ПРОБЕЛ] H I J K L [ENTER].

Кстати, добавить одну строку в то время в TEXTAREA с цикл так:.

for(int cnt = 0; cnt <= strings.length; cnt++){ 

     if(strings[cnt].length() != 1){ 
      text.append("[" + strings[cnt] + "] "); 
     } 
     else{ 
      text.append(strings[cnt]); 
       //tryed to do it like that, but obviously did not work the way it wanted it to 

// text.getHighlighter() addHighlight (CNT, CNT + 1, highlightPainter) ; }}

+0

'JTextArea' - это простой текст без форматирования. Весь текст может быть цветом переднего плана, но об этом. Вместо этого вам нужно использовать 'JTextPane' или' JEditorPane'. –

+1

Для примера [http://stackoverflow.com/a/9652143/1057230) :-) –

ответ

6

цвет для JTextArea текста в своей работе применяет цвет переднего плана на весьJTextComponent'sDocument, а не к отдельным символам. Вы можете использовать JTextPane вместо

Вот простой пример:

enter image description here

public class ColoredTextApp { 

    public static void main(String[] args) { 

     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame("Colored Text"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

       StyledDocument doc = new DefaultStyledDocument(); 
       JTextPane textPane = new JTextPane(doc); 
       textPane.setText("Different Colored Text"); 

       Random random = new Random(); 
       for (int i = 0; i < textPane.getDocument().getLength(); i++) { 
        SimpleAttributeSet set = new SimpleAttributeSet(); 
        StyleConstants.setForeground(set, 
          new Color(random.nextInt(256), random.nextInt(256), 
            random.nextInt(256))); 
        StyleConstants.setFontSize(set, random.nextInt(12) + 12); 
        StyleConstants.setBold(set, random.nextBoolean()); 
        doc.setCharacterAttributes(i, 1, set, true); 
       } 

       frame.add(new JScrollPane(textPane)); 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
4

Вы не можете. A JTextArea - это простой неформатированный текст. Весь текст может быть одного и того же шрифта или цвета переднего плана, но об этом. Вместо этого вам нужно использовать JTextPane или JEditorPane.

Проверьте JTextPane/JEditorPane Tutorial.

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