Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change text color in the JTextArea?

I need to know how to do this:

Let's say: I have a code in the JTextArea like this:

LOAD R1, 1 DEC R1 STORE M, R1 ADD R4, R1,8 

I wanted to change the color of LOAD, DEC, STORE and ADD to color BLUE R1, R4 to color green M to RED numbers to ORANGE

How to change the color of this text? These text were from notepad or can be directly type to the text area.

like image 773
Celine Avatar asked Mar 10 '12 23:03

Celine


People also ask

How do I change text color in Netbeans?

Go to Tools -> Options then to Fonts and Colors tab.

How do I add text to JTextArea?

Use textArea. append("text") , but I recomend JTextPane for more control like color, selection, etc.


1 Answers

JTextArea is meant to entertain Plain Text. The settings applied to a single character applies to whole of the document in JTextArea. But with JTextPane or JEditorPane you have the choice, to colour your String Literals as per your liking. Here with the help of JTextPane, you can do it like this :

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();                 }             });     } } 

here is the Output :

JTextPane

like image 138
nIcE cOw Avatar answered Oct 03 '22 02:10

nIcE cOw