Swing/HighlightWordInNode のバックアップの現在との差分(No.3)
- category: swing folder: HighlightWordInNode title: JTreeのノード中の文字列をハイライトする tags: [JTree, TreeCellRenderer, JTextField, HighlightPainter] author: aterai pubdate: 2013-07-01T00:02:16+09:00 description: JTreeのノードから文字列を検索して、HighlightPainterで強調表示します。 image:
概要
概要
JTree
のノードから文字列を検索して、HighlightPainter
で強調表示します。
Screenshot
Advertisement
サンプルコード
サンプルコード
class HighlightTreeCellRenderer extends JTextField
implements TreeCellRenderer {
Color backgroundSelectionColor = new Color(220, 240, 255);
private static final Color BACKGROUND_SELECTION_COLOR = 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);
}
#spanadd
#spanend
@Override public Component getTreeCellRendererComponent(
JTree tree, Object value, boolean isSelected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
String txt = value!=null ? value.toString() : "";
String txt = Objects.toString(value, "");
getHighlighter().removeAllHighlights();
setText(txt);
setBackground(isSelected ? backgroundSelectionColor : Color.WHITE);
if(q!=null && !q.isEmpty() && txt.startsWith(q)) {
setBackground(isSelected ? BACKGROUND_SELECTION_COLOR : Color.WHITE);
if (q != null && !q.isEmpty() && txt.startsWith(q)) {
try {
getHighlighter().addHighlight(0, q.length(), highlightPainter);
} catch(BadLocationException e) {
} catch (BadLocationException e) {
e.printStackTrace();
}
}
return this;
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、TreeCellRenderer
にJLabel
ではなく、JTextField
を使用しJTextField#getHighlighter()#addHighlight(...)
で検索中の文字列をハイライト表示しています。
解説
上記のサンプルでは、TreeCellRenderer
にJLabel
ではなくJTextField
を使用してJTextField#getHighlighter()#addHighlight(...)
メソッドで検索中の文字列をハイライト表示しています。
参考リンク
参考リンク
- JTreeで条件に一致するノードを検索しハイライト
- こちらは、ノードの色を変更してハイライト表示
- こちらはノードの色を変更してハイライト表示
- Highlighterで文字列をハイライト