JTableで選択されているすべてのセルを取得する
Total: 6600
, Today: 5
, Yesterday: 3
Posted by aterai at
Last-modified:
概要
JTable
で選択されているすべてのセルを取得し、その値を一括で変更します。
Screenshot
Advertisement
サンプルコード
JMenuItem toggle = new JMenuItem("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形式コピーをカスタマイズする