2012-03-05 5 views
2

У меня есть файл, который я буду читать по строкам. Разделите каждую строку на слова, используя метод разделения и покрасьте слова на основе их положений (первые 4 символа каждой строки и т. Д.), А также на основе слов. Различные цвета должны применяться к различным словам, как показано ниже. Я хочу знать, какой класс полезен, я смотрел в ярлык. Любые предложения, с примером было бы очень полезноРаскраски в java

String text = textArea.getText(); 
String newLine = "\n"; 
String spaceDelim = "[ ]+"; 
String[] tokens; 
String lines = text.split(newLine); 
for(String line : lines) { 
    tokens = line.split(spaceDelim); 
    tokens[1] //should be in redColor 
    tokens[2] //should be in greenColor 
    tokens[3] tokens[4] //should in blueColor 
} 

ответ

6

Если вы хотите иметь различные текстовые литералы имеют разные цвета, вы должны прочитать о How to use Editor Pane or TextPane. Это поможет вам в этом.

пример программы:

import java.awt.*; 

import java.awt.event.*; 

import javax.swing.*; 

import javax.swing.border.*; 

import javax.swing.text.AttributeSet; 
import javax.swing.text.SimpleAttributeSet; 
import javax.swing.text.StyleConstants; 
import javax.swing.text.StyleContext; 

public class TextPaneTest extends JFrame 
{ 
    private JPanel topPanel; 
    private JTextPane tPane; 

    public TextPaneTest() 
    { 
     topPanel = new JPanel();   

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null);    

     EmptyBorder eb = new EmptyBorder(new Insets(10, 10, 10, 10)); 

     tPane = new JTextPane();     
     tPane.setBorder(eb); 
     //tPane.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY)); 
     tPane.setMargin(new Insets(5, 5, 5, 5)); 

     topPanel.add(tPane); 

     appendToPane(tPane, "My Name is Too Good.\n", Color.RED); 
     appendToPane(tPane, "I wish I could be ONE of THE BEST on ", Color.BLUE); 
     appendToPane(tPane, "Stack", Color.DARK_GRAY); 
     appendToPane(tPane, "Over", Color.MAGENTA); 
     appendToPane(tPane, "flow", Color.ORANGE); 

     getContentPane().add(topPanel); 

     pack(); 
     setVisible(true); 
    } 

    private void appendToPane(JTextPane tp, String msg, Color c) 
    { 
     StyleContext sc = StyleContext.getDefaultStyleContext(); 
     AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY, StyleConstants.Foreground, c); 

     aset = sc.addAttribute(aset, StyleConstants.FontFamily, "Lucida Console"); 
     aset = sc.addAttribute(aset, StyleConstants.Alignment, StyleConstants.ALIGN_JUSTIFIED); 

     int len = tp.getDocument().getLength(); 
     tp.setCaretPosition(len); 
     tp.setCharacterAttributes(aset, false); 
     tp.replaceSelection(msg); 
    } 

    public static void main(String... args) 
    { 
     SwingUtilities.invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        new TextPaneTest(); 
       } 
      }); 
    } 
} 

А вот выход из этого кода:

JTEXTPANE EXAMPLE

+0

Спасибо, это то, что я ищу. Я попробую и вернусь. – FirmView

+1

@FirmView: Ваше приветствие и быть моим гостем, с чем я могу вам помочь, я буду :-) –

+2

* «Пример фрагмента программы:« * Нечетно вы должны добавить «фрагмент» к этим словам. Я имею в виду, что «фрагмент» обычно передает «короткий», но в контексте программирования он также подразумевает (по крайней мере, мне) «слишком короткий, чтобы работать без кода». Эта программа-образец готова к работе, как есть. (+1 для кода и экрана, BTW) –

5

Использование JTextPane с HTMLEditorKit добавления тегов красящих.

Или вы можете использовать JEditorPane/JTextPane с StyledEditorKit и указать цвет текста с помощью StyleConstants.setForeground()

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