Swing/HighlightWordInNode のバックアップソース(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/HighlightWordInNode へ行く。
TITLE:JTreeのノード中の文字列をハイライトする #navi(../) #tags(JTree, TreeCellRenderer, JTextField, HighlightPainter) RIGHT:Posted by &author(aterai); at 2013-07-01 * JTreeのノード中の文字列をハイライトする [#re290e8f] `JTree`のノードから文字列を検索して、`HighlightPainter`で強調表示します。 - &jnlp; - &jar; - &zip; #ref(https://lh4.googleusercontent.com/-rBf-D-8MbOM/UdBIT7ksWjI/AAAAAAAABvI/m_v7K_LuLao/s800/HighlightWordInNode.png) ** サンプルコード [#c24b12df] #code(link){{ 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; } } }} ** 解説 [#d110ee6b] 上記のサンプルでは、`TreeCellRenderer`に`JLabel`ではなく、`JTextField`を使用し`JTextField#getHighlighter()#addHighlight(...)`で検索中の文字列をハイライト表示しています。 ** 参考リンク [#g34180a0] - [[JTreeで条件に一致するノードを検索しハイライト>Swing/TreeNodeHighlightSearch]] -- こちらは、ノードの色を変更してハイライト表示 - [[Highlighterで文字列をハイライト>Swing/Highlighter]] ** コメント [#y9b737b4] #comment