Как изменить цвет текста в JtextArea?

Мне нужно знать, как это сделать:

Скажем: у меня есть код в jtextArea, как это,

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

Я хотел изменить цвет LOAD, DEC, STORE и ADD, чтобы покрасить BLUE R1, R4, чтобы покрасить зеленые M в красные цифры в ORANGE

Как изменить цвет этого текста? Этот текст был из блокнота или может быть непосредственно напечатан в textArea.

Заранее спасибо.

JTextArea предназначен для размещения JTextArea Plain Text . Параметры, применяемые к одному символу, применяются ко всему документу в JTextArea . Но с JTextPane или JEditorPane вас есть выбор, чтобы покрасить ваши String Literals по вашему вкусу. Здесь с помощью JTextPane вы можете сделать это следующим образом:

 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

так как возможно использовать Highlighter (или Html) для JTextArea , этот API реализует уменьшенные варианты для стилизованного текста

введите описание изображения здесь

 import java.awt.*; import javax.swing.*; import javax.swing.text.*; public class TextPaneHighlighting { private static final long serialVersionUID = 1L; private Highlighter.HighlightPainter cyanPainter; private Highlighter.HighlightPainter redPainter; public TextPaneHighlighting() { JFrame frame = new JFrame(); JTextPane textPane = new JTextPane(); textPane.setText("one\ntwo\nthree\nfour\nfive\nsix\nseven\neight\n"); JScrollPane scrollPane = new JScrollPane(textPane); frame.add(scrollPane, BorderLayout.CENTER);// Highlight some text cyanPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.cyan); redPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.red); try { textPane.getHighlighter().addHighlight(0, 3, DefaultHighlighter.DefaultPainter); textPane.getHighlighter().addHighlight(8, 14, cyanPainter); textPane.getHighlighter().addHighlight(19, 24, redPainter); } catch (BadLocationException ble) { } frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setPreferredSize(new Dimension(300, 200)); frame.setLocationRelativeTo(null); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { TextPaneHighlighting tph = new TextPaneHighlighting(); } }); } } 

в сравнении с JTextPane есть опции, более переменные, например Highlighter, с Html или без Html, Font или другие JComponent внутри, используя Html или напрямую (знаю JTextArea тоже, но …)

введите описание изображения здесь

 import java.awt.*; import javax.swing.*; import javax.swing.text.*; public class Fonts implements Runnable { private String[] fnt; private JFrame frm; private JScrollPane jsp; private JTextPane jta; private int width = 450; private int height = 300; private GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); private StyledDocument doc; private MutableAttributeSet mas; private int cp = 0; private Highlighter.HighlightPainter cyanPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.cyan); private Highlighter.HighlightPainter redPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.red); private Highlighter.HighlightPainter whitePainter = new DefaultHighlighter.DefaultHighlightPainter(Color.white); private int _count = 0; private int _lenght = 0; public Fonts() { jta = new JTextPane(); doc = jta.getStyledDocument(); jsp = new JScrollPane(jta); jsp.setPreferredSize(new Dimension(height, width)); frm = new JFrame("awesome"); frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frm.setLayout(new BorderLayout()); frm.add(jsp, BorderLayout.CENTER); frm.setLocation(100, 100); frm.pack(); frm.setVisible(true); jta.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); fnt = ge.getAvailableFontFamilyNames(); mas = jta.getInputAttributes(); new Thread(this).start(); } @Override public void run() { for (int i = 0; i < fnt.length; i++) { StyleConstants.setBold(mas, false); StyleConstants.setItalic(mas, false); StyleConstants.setFontFamily(mas, fnt[i]); StyleConstants.setFontSize(mas, 16); dis(fnt[i]); try { Thread.sleep(75); } catch (Exception e) { e.printStackTrace(); } StyleConstants.setBold(mas, true); dis(fnt[i] + " Bold"); try { Thread.sleep(75); } catch (Exception e) { e.printStackTrace(); } StyleConstants.setItalic(mas, true); dis(fnt[i] + " Bold & Italic"); try { Thread.sleep(75); } catch (Exception e) { e.printStackTrace(); } StyleConstants.setBold(mas, false); dis(fnt[i] + " Italic"); try { Thread.sleep(75); } catch (Exception e) { e.printStackTrace(); } } jta.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } public void dis(String s) { _count++; _lenght = jta.getText().length(); try { doc.insertString(cp, s, mas); doc.insertString(cp, "\n", mas); } catch (Exception bla_bla_bla_bla) { bla_bla_bla_bla.printStackTrace(); } if (_count % 2 == 0) { try { jta.getHighlighter().addHighlight(1, _lenght - 1, cyanPainter); } catch (BadLocationException bla_bla_bla_bla) { } } else if (_count % 3 == 0) { try { jta.getHighlighter().addHighlight(1, _lenght - 1, redPainter); } catch (BadLocationException bla_bla_bla_bla) { } } else { try { jta.getHighlighter().addHighlight(1, _lenght - 1, whitePainter); } catch (BadLocationException bla_bla_bla_bla) { } } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { Fonts fs = new Fonts(); } }); } } 

Использование может использовать JEditorPane с HTML или написать собственный документ, который окрашивает элементы.

Вы не можете иметь разные символы в разных цветах в JTextArea (по крайней мере, не без сложного хакера). Вместо этого используйте JTextPane или JEditorPane. Затем вы можете получить доступ к своему StyledDocument :

 StyledDocument sdoc = pane.getStyledDocument() 

EDITED : изменено на прямой вызов getStyledDocument , вместо того, чтобы вызывать результат getDocument ()

Вызовите setCharacterAttributes на StyledDocument чтобы изменить цвета отдельных символов или подстрок.

Для некоторых основных раскрасок (единственное, что вы можете сделать с JTextArea) вы можете изменить цвет фона и переднего плана на что-то вроде этого, но это будет окрасить весь текст, конечно:

  textArea.setBackground(Color.ORANGE); textArea.setForeground(Color.RED); 

Результат:

введите описание изображения здесь

Еще одна альтернатива. Для теории см. Другие ответы.

Это создает атрибуты при добавлении текста вместо того, чтобы выводить стиль, как в ответе nIcE cOw. Функциональные возможности совпадают, так как панель объединяет атрибуты с любыми ранее использованными атрибутами.

 public final class SomeClass { private final JTextPane textPane = new JTextPane(); private void print(String msg, Color foreground, Color background) { AttributeSet attributes = new SimpleAttributeSet(textPane.getInputAttributes()); StyleConstants.setForeground(attributes, foreground); StyleConstants.setBackground(attributes, background); try { textPane.getStyledDocument().insertString(textPane.getDocument().getLength(), msg, attributes); } catch (BadLocationException ignored) { } } } 

[Edit] изменен на insertString вместо replaceSelection потому что последнее не работает, когда панель не редактируется

Еще одна альтернатива. Для теории см. Другие ответы.

В этом поле используются предварительно сконфигурированные стили. Следите за тем, чтобы выставлять эти поля такими, какие они есть, ehm, mutable.

 public final class SomeClass { private final JTextPane textPane = new JTextPane(); private final MutableAttributeSet attributes1; private final MutableAttributeSet attributes2; public SomeClass() { attributes1 = new SimpleAttributeSet(textPane.getInputAttributes()); StyleConstants.setForeground(attributes1, Color.BLACK); StyleConstants.setBackground(attributes1, Color.GREEN); attributes2 = new SimpleAttributeSet(textPane.getInputAttributes()); StyleConstants.setForeground(attributes2, Color.WHITE); StyleConstants.setBackground(attributes2, Color.RED); } private void print(String msg, AttributeSet attributes) { try { textPane.getStyledDocument().insertString(textPane.getDocument().getLength(), msg, attributes); } catch (BadLocationException ignored) { } } } 

[Edit] изменен на insertString вместо replaceSelection потому что последнее не работает, когда панель не редактируется

  • Использование addMouseListener () и paintComponent () для JPanel
  • Как установить DPI приложений Java Swing в Windows / Linux?
  • Приведение компонента к BufferedImage приводит к повреждению отображения
  • Растянуть текст JLabel
  • Показать JFrame на определенном экране в конфигурации с двумя мониторами
  • addKeyListener () не работает для JPanel
  • Мероприятия по событиям в саперах
  • Выбор нескольких строк в JTable
  • Поддержка локального меню Swing для MacOS X на Java
  • Анимация при использовании Gridbag Layout.
  • java swingworker thread для обновления основного Gui
  • Давайте будем гением компьютера.