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 --- * 概要 [#summary] JTableで選択されているすべてのセルを取得し、その値を一括で変更します。 #download(https://drive.google.com/uc?export=view&id=1ggYIcKf-1ErfYHclwW_lUH1U1N0dvgye7g) * サンプルコード [#sourcecode] #code(link){{ 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); } } }); }} * 解説 [#explanation] 上記のサンプルでは、`JTable#getSelectedRows()`メソッドですべての選択行インデックス、`JTable#getSelectedColumns()`メソッドですべての選択列インデックスを取得し、`2`重`for`ループで処理することで選択されたすべてのセルに対して値の変更を行っています。 ---- KBD{Shift}キーを押しながらの範囲選択、KBD{Ctrl}キーを押しながらの連続選択でセルの値が変更されないよう、以下のように`DefaultCellEditor#isCellEditable()`メソッドをオーバーライドしています。 #code{{ @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); } // ... } }} * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JTable.html#getSelectedRows-- JTable#getSelectedRows() (Java Platform SE 8)] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JTable.html#getSelectedColumns-- JTable#getSelectedColumns() (Java Platform SE 8)] - [[JTableのHTML形式コピーをカスタマイズする>Swing/HtmlTableTransferHandler]] * コメント [#comment] #comment #comment