Swing/HighlightWordInNode のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/HighlightWordInNode へ行く。
- 1 (2013-07-01 (月) 00:02:16)
- 2 (2013-10-16 (水) 14:13:45)
- 3 (2015-02-06 (金) 19:36:48)
- 4 (2015-03-02 (月) 11:27:25)
- 5 (2016-12-24 (土) 20:33:17)
- 6 (2017-12-09 (土) 02:15:41)
- 7 (2019-12-05 (木) 15:39:32)
- 8 (2021-06-06 (日) 17:32:22)
- 9 (2025-01-03 (金) 08:57:02)
- 10 (2025-01-03 (金) 09:01:23)
- 11 (2025-01-03 (金) 09:02:38)
- 12 (2025-01-03 (金) 09:03:21)
- 13 (2025-01-03 (金) 09:04:02)
- 14 (2025-06-19 (木) 12:41:37)
- 15 (2025-06-19 (木) 12:43:47)
TITLE:JTreeのノード中の文字列をハイライトする
Posted by aterai at 2013-07-01
JTreeのノード中の文字列をハイライトする
`JTree
のノードから文字列を検索して、
HighlightPainter
`で強調表示します。
- &jnlp;
- &jar;
- &zip;
#ref(): Usage:([pagename/]attached-file-name[,parameters, ... ][,title])
サンプルコード
class HighlightTreeCellRenderer extends JTextField
implements TreeCellRenderer {
Color backgroundSelectionColor = new Color(220, 240, 255);
Highlighter.HighlightPainter highlightPainter =
new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW);
public String q;
public HighlightTreeCellRenderer() {
super();
setOpaque(true);
setBorder(BorderFactory.createEmptyBorder());
setForeground(Color.BLACK);
setBackground(Color.WHITE);
setEditable(false);
}
public void removeHighlights() {
Highlighter highlighter = getHighlighter();
for(Highlighter.Highlight h: highlighter.getHighlights()) {
highlighter.removeHighlight(h);
}
}
@Override public Component getTreeCellRendererComponent(
JTree tree, Object value, boolean isSelected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
String txt = value!=null ? value.toString() : "";
removeHighlights();
setText(txt);
setBackground(isSelected ? backgroundSelectionColor : Color.WHITE);
if(q!=null && !q.isEmpty() && txt.startsWith(q)) {
try {
getHighlighter().addHighlight(0, q.length(), highlightPainter);
} catch(BadLocationException e) {
e.printStackTrace();
}
}
return this;
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、`TreeCellRenderer
に
JLabel
ではなく、
JTextField
を使用し
JTextField#getHighlighter()#addHighlight(...)
`で検索中の文字列をハイライト表示しています。
参考リンク
- JTreeで条件に一致するノードを検索しハイライト
- こちらは、ノードの色を変更してハイライト表示
- Highlighterで文字列をハイライト