Swing/ColumnSelectability のバックアップの現在との差分(No.5)
- category: swing folder: ColumnSelectability title: JTableで選択可能な列を制限する tags: [JTable, TableColumn] author: aterai pubdate: 2015-10-19T00:12:40+09:00 description: JTableの任意の列でマウスクリックなどによる選択ができないように制限します。 image:
概要
JTable
の任意の列でマウスクリックなどによる選択ができないように制限します。
Screenshot
Advertisement
サンプルコード
JTable table = new JTable(model) {
private boolean isColumnSelectable(int column) {
return convertColumnIndexToModel(column) == 0;
}
#spanadd
#spanend
@Override public void changeSelection(
int rowIndex, int columnIndex, boolean toggle, boolean extend) {
if (!isColumnSelectable(columnIndex)) {
return;
}
super.changeSelection(rowIndex, columnIndex, toggle, extend);
}
#spanadd
#spanend
@Override public boolean isCellEditable(int row, int column) {
return isColumnSelectable(column);
}
#spanadd
#spanend
@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);
}
}
};
View in GitHub: Java, Kotlin解説
上記のサンプルでは、第0
列目のみ選択・編集可能にし、残りの列はマウスクリックやカーソル移動などで選択できないように、JTable#changeSelection(...)
、JTable#changeSelection(...)
をオーバーライドしています。
上記のサンプルでは、第0
列目のみ選択・編集可能に設定し、残りの列はマウスクリックやカーソル移動などで選択できないようJTable#changeSelection(...)
とJTable#changeSelection(...)
メソッドをオーバーライドしています。
-
JTable#isCellEditable(...)
は、編集不可にするためにオーバーライド -
JTable#isCellEditable(...)
メソッドをオーバーライドして編集不可に設定- 選択不可で編集可能な列も設定可能
-
JTable#prepareRenderer(...)
は、列を並べ替えた場合、フォーカスが選択不可の列に移動することを避けるためにオーバーライド-
table.getTableHeader().setReorderingAllowed(false);
として列の並べ替えを禁止している場合は不要
-
- メモ:
table.putClientProperty("Table.isFileList", Boolean.TRUE);
で、第0
列目の文字列のみ選択可能になる -
JTable#prepareRenderer(...)
メソッドをオーバーライドして列を並べ替えたときにフォーカスが選択不可の列に移動しないよう設定-
table.getTableHeader().setReorderingAllowed(false)
などで列の並べ替えを禁止している場合は不要
-
-
table.putClientProperty("Table.isFileList", Boolean.TRUE);
で、第0
列目の文字列のみ選択可能になる
参考リンク
- JTableで文字列をクリックした場合だけセルを選択状態にする
- JTableの列を編集可、かつ選択不可に設定
- こちらは、選択不可だが、編集は可能な列を設定する場合のサンプル
- こちらは、選択不可だが編集は可能な列を設定する場合のサンプル