Swing/ColumnSelectability のバックアップ差分(No.6)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/ColumnSelectability へ行く。
- 追加された行はこの色です。
- 削除された行はこの色です。
--- category: swing folder: ColumnSelectability title: JTableで選択可能な列を制限する tags: [JTable, TableColumn] author: aterai pubdate: 2015-10-19T00:12:40+09:00 description: JTableの任意の列でマウスクリックなどによる選択ができないように制限します。 image: https://lh3.googleusercontent.com/-kvjA0RzkNxQ/ViOrBhPfAiI/AAAAAAAAOEc/meMBIUCKAmc/s800-Ic42/ColumnSelectability.png --- * 概要 [#summary] `JTable`の任意の列でマウスクリックなどによる選択ができないように制限します。 #download(https://lh3.googleusercontent.com/-kvjA0RzkNxQ/ViOrBhPfAiI/AAAAAAAAOEc/meMBIUCKAmc/s800-Ic42/ColumnSelectability.png) * サンプルコード [#sourcecode] #code(link){{ JTable table = new JTable(model) { private boolean isColumnSelectable(int column) { return convertColumnIndexToModel(column) == 0; } @Override public void changeSelection( int rowIndex, int columnIndex, boolean toggle, boolean extend) { if (!isColumnSelectable(columnIndex)) { return; } super.changeSelection(rowIndex, columnIndex, toggle, extend); } @Override public boolean isCellEditable(int row, int column) { return isColumnSelectable(column); } @Override public Component prepareRenderer( TableCellRenderer renderer, int row, int column) { if (isColumnSelectable(column)) { return super.prepareRenderer(renderer, row, column); } else { return renderer.getTableCellRendererComponent( this, getValueAt(row, column), false, false, row, column); } } }; }} * 解説 [#explanation] 上記のサンプルでは、第`0`列目のみ選択・編集可能にし、残りの列はマウスクリックやカーソル移動などで選択できないように、`JTable#changeSelection(...)`、`JTable#changeSelection(...)`をオーバーライドしています。 上記のサンプルでは、第`0`列目のみ選択・編集可能にし、残りの列はマウスクリックやカーソル移動などで選択できないように、`JTable#changeSelection(...)`、`JTable#changeSelection(...)`メソッドをオーバーライドしています。 - `JTable#isCellEditable(...)`は、編集不可にするためにオーバーライド - `JTable#isCellEditable(...)`メソッドは、編集不可にするためにオーバーライド -- 選択不可で編集可能な列も設定可能 - `JTable#prepareRenderer(...)`は、列を並べ替えた場合、フォーカスが選択不可の列に移動することを避けるためにオーバーライド - `JTable#prepareRenderer(...)`メソッドは、列を並べ替えた場合、フォーカスが選択不可の列に移動することを避けるためにオーバーライド -- `table.getTableHeader().setReorderingAllowed(false);`として列の並べ替えを禁止している場合は不要 - メモ: `table.putClientProperty("Table.isFileList", Boolean.TRUE);`で、第`0`列目の文字列のみ選択可能になる -- [[JTableで文字列をクリックした場合だけセルを選択状態にする>Swing/TableFileList]] * 参考リンク [#reference] - [[JTableで文字列をクリックした場合だけセルを選択状態にする>Swing/TableFileList]] - [[JTableの列を編集可、かつ選択不可に設定>Swing/DisableColumnSelection]] -- こちらは、選択不可だが、編集は可能な列を設定する場合のサンプル * コメント [#comment] #comment #comment