DefaultHighlightPainter
の内部クラスを見てくださいDefaultHighlighter
。
方法
public void paint(Graphics g, int offs0, int offs1, Shape bounds, JTextComponent c) {
Rectangle alloc = bounds.getBounds();
try {
// --- determine locations ---
TextUI mapper = c.getUI();
Rectangle p0 = mapper.modelToView(c, offs0);
Rectangle p1 = mapper.modelToView(c, offs1);
// --- render ---
Color color = getColor();
if (color == null) {
g.setColor(c.getSelectionColor());
}
else {
g.setColor(color);
}
ご覧のとおり、またはのいずれgetColor()
かを使用しますgetSelectionColor()
。クラスを拡張して、ハイライト ペインティングを適応させることができます。
または、より簡単なアプローチを使用して、あなたJTextPane
のをオーバーライドしますgetSelectionColor()
。このメソッドでは、テキストが選択されているかどうかを確認し、選択した要素の属性を使用して目的の ccolor を取得します。何も選択されていない場合はそのまま戻りますsuper.getSelectedColor()
更新: 選択のために実際に色を適用することは、低レベルの GlyphView の public void paint(Graphics g, Shape a) { ... JTextComponent tc = (JTextComponent) c; で使用されます。色 selFG = tc.getSelectedTextColor();
if (// there's a highlighter (bug 4532590), and
(tc.getHighlighter() != null) &&
// selected text color is different from regular foreground
(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) {
// the selection is out of this view
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とペインター次第。onw ペインターを定義すると、色は使用されません。