Swing/TableHighlightRegexFilter のバックアップの現在との差分(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/TableHighlightRegexFilter へ行く。
- 1 (2013-07-29 (月) 00:24:19)
- 2 (2013-10-08 (火) 15:10:05)
- 3 (2014-06-12 (木) 21:32:31)
- 4 (2014-06-29 (日) 06:46:50)
- 5 (2014-10-27 (月) 16:04:06)
- 6 (2014-11-22 (土) 04:00:54)
- 7 (2015-12-22 (火) 00:38:22)
- 8 (2017-06-09 (金) 13:14:11)
- 9 (2017-11-13 (月) 15:27:42)
- 10 (2017-11-16 (木) 12:59:31)
- 11 (2018-02-24 (土) 19:51:30)
- 12 (2019-04-09 (火) 20:12:46)
- 13 (2021-01-28 (木) 02:10:18)
- 14 (2023-12-24 (日) 15:28:53)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: TableHighlightRegexFilter title: JTableの検索結果をRowFilterとHighlighterで強調表示する tags: [JTable, RowFilter, TableRowSorter, Highlighter, TableCellRenderer, JTextField, Pattern, Matcher] author: aterai pubdate: 2013-07-29T00:24:19+09:00 description: JTableで正規表現による検索結果をRowFilterとHighlighterを使用して表現します。 image: https://lh3.googleusercontent.com/-9b6L1m5fhBk/UfUzbWaYGtI/AAAAAAAABw8/xhrIa_pJXls/s800/TableHighlightRegexFilter.png hreflang: href: https://java-swing-tips.blogspot.com/2013/07/jtable-highlighting-and-filtering-with.html lang: en --- * 概要 [#g00b23a1] * 概要 [#summary] `JTable`で正規表現による検索結果を`RowFilter`と`Highlighter`を使用して表現します。 #download(https://lh3.googleusercontent.com/-9b6L1m5fhBk/UfUzbWaYGtI/AAAAAAAABw8/xhrIa_pJXls/s800/TableHighlightRegexFilter.png) * サンプルコード [#la836955] * サンプルコード [#sourcecode] #code(link){{ class HighlightTableCellRenderer extends JTextField implements TableCellRenderer { private static final Color backgroundSelectionColor = new Color(220, 240, 255); private static final Highlighter.HighlightPainter highlightPainter class HighlightTableCellRenderer extends JTextField implements TableCellRenderer { private static final Color BGC= new Color(220, 240, 255); private final transient Highlighter.HighlightPainter highlightPainter = new DefaultHighlighter.DefaultHighlightPainter(Color.YELLOW); private String pattern = ""; private String prev = null; private String prev; public boolean setPattern(String str) { if(str==null || str.equals(pattern)) { if (str == null || str.equals(pattern)) { return false; }else{ } else { prev = pattern; pattern = str; return true; } } public HighlightTableCellRenderer() { super(); setOpaque(true); setBorder(BorderFactory.createEmptyBorder()); setForeground(Color.BLACK); setBackground(Color.WHITE); setEditable(false); } @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { String txt = value!=null ? value.toString() : ""; JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { String txt = Objects.toString(value, ""); Highlighter highlighter = getHighlighter(); highlighter.removeAllHighlights(); setText(txt); setBackground(isSelected ? backgroundSelectionColor : Color.WHITE); if(pattern!=null && !pattern.isEmpty() && !pattern.equals(prev)) { setBackground(isSelected ? BGC : Color.WHITE); if (pattern != null && !pattern.isEmpty() && !pattern.equals(prev)) { Matcher matcher = Pattern.compile(pattern).matcher(txt); if(matcher.find()) { int pos = 0; while (matcher.find(pos) && !matcher.group().isEmpty()) { int start = matcher.start(); int end = matcher.end(); try{ try { highlighter.addHighlight(start, end, highlightPainter); }catch(BadLocationException | PatternSyntaxException e) { } catch (BadLocationException | PatternSyntaxException e) { e.printStackTrace(); } pos = end; } } return this; } } }} * 解説 [#i99ab544] * 解説 [#explanation] - セル中文字列のハイライト -- [[JTreeのノード中の文字列をハイライトする>Swing/HighlightWordInNode]] -- `JTextField`を継承する`TableCellRenderer`を作成し、`JTextField#getHighlighter()#addHighlight(...)`で検索結果の文字列をハイライト表示 -- 参考: [[JTreeのノード中の文字列をハイライトする>Swing/HighlightWordInNode]] -- `JTextField`を継承する`TableCellRenderer`を作成し、`JTextField#getHighlighter()#addHighlight(...)`メソッドで検索結果をハイライト表示 - 行のフィルタリング -- [[RowFilterでJTableの行をフィルタリング>Swing/RowFilter]] -- 参考: [[RowFilterでJTableの行をフィルタリング>Swing/RowFilter]] -- `RowFilter.regexFilter(pattern)`で正規表現を使用するフィルタを作成し、その検索にマッチする行以外は非表示 * 参考リンク [#dd781691] * 参考リンク [#reference] - [[JTreeのノード中の文字列をハイライトする>Swing/HighlightWordInNode]] - [[RowFilterでJTableの行をフィルタリング>Swing/RowFilter]] - [[JTableのセル内文字列をHTMLタグを使用してハイライト>Swing/TableCellHtmlHighlighter]] * コメント [#v712db1e] * コメント [#comment] #comment #comment