Я хочу предоставить возможность редактирования нескольких ячеек в JTable: двойной щелчок по-прежнему будет редактировать значение в выбранной ячейке (стандартное поведение), а щелчок правой кнопкой мыши должен открыть всплывающее меню с записью «Редактировать выбранные ячейки».".
Когда пользователь нажимает эту запись меню, последняя ячейка в выбранном диапазоне становится редактируемой.Другие выбранные ячейки остаются выделенными.Затем они записывают новое значение и, когда издание завершено (обычно нажатием Enter), все выбранные ячейки получают это значение.
Для простоты предположим, что все ячейки содержат одинаковые типы значений,скажем, целые числа.
Вот код, который показывает всплывающее диалоговое окно, чтобы начать:
table.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
table.setCellSelectionEnabled(true);
table.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) {
doPop(e);
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) {
doPop(e);
}
}
private void doPop(MouseEvent e) {
MultiEditPopUp menu = new MultiEditPopUp(tblRanges);
menu.show(e.getComponent(), e.getX(), e.getY());
}
});
class MultiEditPopUp extends JPopupMenu {
JMenuItem menuItem;
MultiEditPopUp(JTable table) {
menuItem = new JMenuItem("Edit selected");
menuItem.setAction(new BulkEditAction(table));
add(menuItem);
}
}
class BulkEditAction extends AbstractAction {
private final JTable table;
public BulkEditAction(JTable table) {
this.table = table;
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
// TODO: let the user edit the last cell, and then apply to the others
}
}
Как я могу сделать такую вещь?