У меня есть JTextArea, в котором я выделяю некоторый текст, используя метод addHighlight для Highlighter, который я получаю от JTextArea. Он выделяет текст, но не меняет цвет текста выделенного текста на выбранный вами TextColor, который я установил.
Вот пример:
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;
import javax.swing.text.Highlighter.HighlightPainter;
public class SSCCE {
private JFrame frame;
private JTextArea textArea;
public SSCCE() {
frame = new JFrame();
frame.setTitle("Huge Text");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
textArea = new JTextArea("abcd abcd abcd");
textArea.setBackground(Color.DARK_GRAY);
textArea.setForeground(Color.LIGHT_GRAY);
textArea.setSelectionColor(Color.LIGHT_GRAY);
textArea.setSelectedTextColor(Color.DARK_GRAY);
Highlighter highLighter = textArea.getHighlighter();
HighlightPainter highLightPainter = new DefaultHighlighter.DefaultHighlightPainter(textArea.getSelectionColor());
try {
highLighter.addHighlight(0, 10, highLightPainter);
} catch (BadLocationException e) {
e.printStackTrace();
}
frame.add(new JScrollPane(textArea));
frame.setSize(400, 350);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new SSCCE();
}
});
}
}
Стоит прочитать об использовании текстовых компонентов
Если вы намереваетесь использовать компонент без текстуры, выберите текстовое поле, поле пароля, форматированное текстовое поле или текстовую область.
Если вы собираетесь использовать текстовый компонент в стиле, см. Раздел "Использование панелей редактора и текстовых панелей"
JTextArea
не поддерживает эту функциональность для создания подмножества всего содержимого. Он применяет стили, но во всем содержимом.
Найти образец кода здесь, изменить определенный цвет текста в java
textArea.setForeground(Color.BLUE);
дифференцировать это с выбором цвета.