Swing/GetSelectedCells のバックアップ(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/GetSelectedCells へ行く。
- 1 (2019-01-14 (月) 09:30:05)
- 2 (2019-04-16 (火) 21:08:06)
- 3 (2019-07-29 (月) 02:31:12)
- 4 (2021-01-28 (木) 02:12:21)
- 5 (2022-10-21 (金) 15:41:43)
- category: swing folder: GetSelectedCells title: JTableで選択されているすべてのセルを取得する tags: [JTable, TableCellEditor, JCheckBox, JPopupMenu] author: aterai pubdate: 2019-01-14T09:29:04+09:00 description: JTableで選択されているすべてのセルを取得し、その値を一括で変更します。 image: https://drive.google.com/uc?id=1ggYIcKf-1ErfYHclwW_lUH1U1N0dvgye7g
概要
JTable
で選択されているすべてのセルを取得し、その値を一括で変更します。
Screenshot
Advertisement
サンプルコード
toggle = add("toggle");
toggle.addActionListener(e -> {
JTable table = (JTable) getInvoker();
for (int row: table.getSelectedRows()) {
for (int col: table.getSelectedColumns()) {
Boolean b = (Boolean) table.getValueAt(row, col);
table.setValueAt(!b, row, col);
}
}
});
View in GitHub: Java, Kotlin解説
上記のサンプルでは、JTable#getSelectedRows()
メソッドですべての選択行インデックス、JTable#getSelectedColumns()
メソッドですべての選択列インデックスを取得し、2
重for
ループで処理することで選択されたすべてのセルに対して値の変更を行っています。
- Shiftキーを押しながらの範囲選択やCtrlキーを押しながらの連続選択でセルの値が変更されないようにする場合、以下のように
DefaultCellEditor#isCellEditable()
メソッドをオーバーライドする必要がある
// @see JTable.BooleanEditor
class BooleanEditor extends DefaultCellEditor {
protected BooleanEditor() {
super(new JCheckBox());
JCheckBox check = (JCheckBox) getComponent();
check.setHorizontalAlignment(SwingConstants.CENTER);
}
@Override public boolean isCellEditable(EventObject e) {
if (e instanceof MouseEvent) {
MouseEvent me = (MouseEvent) e;
return !(me.isShiftDown() || me.isControlDown());
}
return super.isCellEditable(e);
}
// ...
}
参考リンク
- JTable#getSelectedRows() (Java Platform SE 8)
- JTable#getSelectedColumns() (Java Platform SE 8)
- JTableのHTML形式コピーをカスタマイズする