我想为JTable提供多单元格编辑功能:双击仍然会编辑所选单元格中的值(标准行为),而右键单击应打开一个弹出菜单中的条目“编辑选定的单元格”。Swing中的多单元格选择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
}
}
我怎样才能做这样的事情?
究竟是什么问题?当接收到编辑后的值时,将它传播给所有选中的单元格,并且很高兴:-) – kleopatra
几个注释(与我没有得到的问题无关;-) a)不分类任何JSomething,而是使用它们(JPopupMenu被设计为添加动作/项目,不需要为了添加特定项目而继承子类)b)始终使用最高抽象,这里意味着setComponentPopupMenu而不是mouseListener(它提供了不完整的功能,无论如何,通过键盘覆盖弹出窗口) – kleopatra
现在的问题是如何让用户编辑该单元格,同时保留选择内容。 感谢您对子类的建议。 – espinchi