Swing/ColumnHeaderHighlight のバックアップソース(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/ColumnHeaderHighlight へ行く。
- 1 (2014-12-29 (月) 00:04:25)
- 2 (2015-01-09 (金) 16:34:09)
- 3 (2016-06-25 (土) 21:24:12)
- 4 (2017-09-23 (土) 13:52:20)
- 5 (2019-03-08 (金) 19:31:20)
- 6 (2020-12-20 (日) 01:38:13)
- 7 (2023-04-21 (金) 02:35:06)
- 8 (2025-01-03 (金) 08:57:02)
- 9 (2025-01-03 (金) 09:01:23)
- 10 (2025-01-03 (金) 09:02:38)
- 11 (2025-01-03 (金) 09:03:21)
- 12 (2025-01-03 (金) 09:04:02)
- 13 (2025-06-19 (木) 12:41:37)
- 14 (2025-06-19 (木) 12:43:47)
--- title: JTableHeaderのハイライト表示 tags: [JTable, JTableHeader, TableCellRenderer, ListSelectionModel] author: aterai pubdate: 2014-12-29T00:02:59+09:00 description: JTableのセルが選択されている場合、そのセルが存在するカラムヘッダにフォーカスを設定します。 --- * 概要 [#v7039c16] `JTable`のセルが選択されている場合、そのセルが存在するカラムヘッダにフォーカスを設定します。 #download(https://lh6.googleusercontent.com/-g01DwekSNRs/VKAYFMHxxEI/AAAAAAAANtw/OwiMQuJ3gQY/s800/ColumnHeaderHighlight.png) * サンプルコード [#n699171a] #code(link){{ class ColumnHeaderRenderer implements TableCellRenderer { @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { TableCellRenderer r = table.getTableHeader().getDefaultRenderer(); ListSelectionModel csm = table.getColumnModel().getSelectionModel(); boolean f = csm.getLeadSelectionIndex() == column ? true : hasFocus; return r.getTableCellRendererComponent(table, value, isSelected, f, row, column); } } }} * 解説 [#n0ed0326] 上記のサンプルでは、リードインデックスがある場合はフォーカスありで自身を描画するヘッダセルレンダラーを作成し、これを`TableColumn#setHeaderRenderer(...)`ですべてのカラムに設定しています。 通常セル選択の変更で`JTableHeader`は再描画されないため、`TableColumnModel`から取得した`SelectionModel`に、`ListSelectionListener`を追加して、リードインデックスのフォーカス変更を描画し直しています。 #code{{ TableColumnModel cm = table.getColumnModel(); cm.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { header.repaint(); } }); }} //* 参考リンク * コメント [#b36d5f33] #comment #comment