Swing/DisableColumnSelection のバックアップ(No.8)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/DisableColumnSelection へ行く。
- 1 (2016-06-20 (月) 00:34:17)
- 2 (2017-04-07 (金) 13:51:51)
- 3 (2017-09-20 (水) 17:52:53)
- 4 (2018-10-26 (金) 16:59:06)
- 5 (2020-10-29 (木) 18:00:22)
- 6 (2022-08-18 (木) 02:55:59)
- 7 (2025-01-03 (金) 08:57:02)
- 8 (2025-01-03 (金) 09:01:23)
- 9 (2025-01-03 (金) 09:02:38)
- 10 (2025-01-03 (金) 09:03:21)
- 11 (2025-01-03 (金) 09:04:02)
- category: swing folder: DisableColumnSelection title: JTableの列を編集可、かつ選択不可に設定 tags: [JTable, ListSelectionModel] author: aterai pubdate: 2016-06-20T00:15:58+09:00 description: JTableの指定した列を編集は可能、ただし選択は不可になるよう設定します。 image:
Summary
JTable
の指定した列を編集は可能、ただし選択は不可になるよう設定します。
Screenshot
Advertisement
サンプルコード
JTable table1 = new JTable(model) {
@Override public void changeSelection(
int rowIndex, int columnIndex, boolean toggle, boolean extend) {
if (convertColumnIndexToModel(columnIndex) != 0) {
return;
}
super.changeSelection(rowIndex, columnIndex, toggle, extend);
}
@Override public Component prepareRenderer(
TableCellRenderer renderer, int row, int column) {
if (convertColumnIndexToModel(column) != 0) {
return renderer.getTableCellRendererComponent(
this, getValueAt(row, column), false, false, row, column);
}
return super.prepareRenderer(renderer, row, column);
}
//TEST:
// @Override public Component prepareEditor(TableCellEditor editor, int row, int column) {
// Component c = super.prepareEditor(editor, row, column);
// c.setBackground(getBackground());
// return c;
// }
};
JTable table2 = new JTable(model) {
@Override public void changeSelection(
int rowIndex, int columnIndex, boolean toggle, boolean extend) {
if (convertColumnIndexToModel(columnIndex) != 0) {
return;
}
super.changeSelection(rowIndex, columnIndex, toggle, extend);
}
};
table2.setCellSelectionEnabled(true);
table2.getColumnModel().setSelectionModel(new DefaultListSelectionModel() {
@Override public boolean isSelectedIndex(int index) {
return table2.convertColumnIndexToModel(index) == 0;
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTable#changeSelection(...)
をオーバーライドするなどの方法で、0
列目以外を編集は可能、ただし選択は不可となるように設定しています。
- 上:
Override JTable#prepareRenderer(...)
JTable#prepareRenderer(...)
をオーバーライドし0
列目以外は選択状態を描画しないように設定Boolean
のデフォルトセルエディタ(JCheckBox
)の背景色を修正していないので、たとえばCtrl+Aで全セルを選択した後に選択不可のBoolean
セルをクリックすると背景色が選択色に変化する場合がある
- 下:
table.setCellSelectionEnabled(true);
+Override ListSelectionModel#isSelectedIndex(...)
- カラムモデルに
ListSelectionModel#isSelectedIndex(...)
をオーバーライドしたListSelectionModel
を設定し0
列目以外は選択されないように設定
- カラムモデルに
参考リンク
- JTableで選択可能な列を制限する
- こちらは編集、選択ともに不可の列を設定する場合のサンプル
- java - JTable disable Column Selection - Stack Overflow