Swing/GetSelectedCells のバックアップ(No.1)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - 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?export=view&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 ^= true, 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) {
int mod = ((MouseEvent) e).getModifiersEx();
boolean isShiftDown = (mod & InputEvent.SHIFT_DOWN_MASK) != 0;
boolean isCtrlDown = (mod & InputEvent.CTRL_DOWN_MASK) != 0;
return !(isShiftDown || isCtrlDown);
}
return super.isCellEditable(e);
}
// ...
}
参考リンク
- JTable#getSelectedRows() (Java Platform SE 8)
- JTable#getSelectedColumns() (Java Platform SE 8)
- JTableのHTML形式コピーをカスタマイズする