请查看
DefaultHighlighter
类的内部类
DefaultHighlightPainter
。
该方法
public void paint(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c) {
Rectangle alloc = bounds.getBounds();
try {
TextUI mapper = c.getUI();
Rectangle p0 = mapper.modelToView(c, offs0);
Rectangle p1 = mapper.modelToView(c, offs1);
Color color = getColor();
if (color == null) {
g.setColor(c.getSelectionColor());
}
else {
g.setColor(color);
}
正如您所看到的,它使用getColor()
或getSelectionColor()
。您可以扩展该类并调整高亮显示的绘画。
或者使用更简单的方法覆盖您的JTextPane
的getSelectionColor()
。在该方法中,只需检查文本是否已选择并使用所选元素的属性来获取所需的颜色即可。如果未选择任何内容,请返回super.getSelectedColor()
更新:
实际上,应用选择颜色是在低级别的GlyphView中使用的
public void paint(Graphics g, Shape a) {
...
JTextComponent tc = (JTextComponent) c;
Color selFG = tc.getSelectedTextColor();
if (
(tc.getHighlighter() != null) &&
(selFG != null) && !selFG.equals(fg)) {
Highlighter.Highlight[] h = tc.getHighlighter().getHighlights();
if(h.length != 0) {
boolean initialized = false;
int viewSelectionCount = 0;
for (int i = 0; i < h.length; i++) {
Highlighter.Highlight highlight = h[i];
int hStart = highlight.getStartOffset();
int hEnd = highlight.getEndOffset();
if (hStart > p1 || hEnd < p0) {
continue;
}
if (!SwingUtilities2.useSelectedTextColor(highlight, tc)) {
continue;
}
您可以看到,在SwingUtilities2.useSelectedTextColor(highlight, tc)中,应用选择颜色与视图的默认颜色有所不同。
在源代码中
http://kickjava.com/src/com/sun/java/swing/SwingUtilities2.java.htm。
public static boolean useSelectedTextColor(Highlighter.Highlight JavaDoc h, JTextComponent JavaDoc c) {
Highlighter.HighlightPainter JavaDoc painter = h.getPainter();
String JavaDoc painterClass = painter.getClass().getName();
if (painterClass.indexOf("javax.swing.text.DefaultHighlighter") != 0 &&
painterClass.indexOf("com.sun.java.swing.plaf.windows.WindowsTextUI") != 0) {
return false;
}
try {
DefaultHighlighter.DefaultHighlightPainter JavaDoc defPainter =
(DefaultHighlighter.DefaultHighlightPainter JavaDoc) painter;
if (defPainter.getColor() != null &&
!defPainter.getColor().equals(c.getSelectionColor())) {
return false;
}
} catch (ClassCastException JavaDoc e) {
return false;
}
return true;
}
使用颜色取决于L&F和绘图器。如果您定义了自己的绘图器,则不会使用颜色。