[英]Making a JTable cell editable - but *not* by double clicking
我正在尝试使用以下行为向JTable
添加列(类似于Windows资源管理器和类似的shell):
双击不得触发单元格的编辑,但如果可能,我希望保留任何其他默认编辑触发器。
我已经尝试将MouseListener
添加到表中,并使用所有MouseEvent
,但这不起作用 - 如果我从isCellEditable()
返回true
,那么我的侦听器永远不会收到任何点击事件但如果我返回false
则F2不再有效。
这可以仅使用事件监听器来实现吗? 如果我可以避免它,我宁愿不搞乱PLAF功能。
DefaultCellEditor有一个setClickCountToStart()方法来控制鼠标点击以进行编辑。 默认值为2.更改此项将对F2功能没有影响。
因此,您可以将编辑设置为三次单击。
不确定如何处理两次单击以开始编辑,但我猜你会使用一个Timer来跟踪第一次点击,然后如果第二次单击在你的时间间隔内就进行编辑。
你必须自己制作cellEditor和ovveride
public boolean isCellEditable( EventObject e )
您可以使用eventObject上的clickCount区分单击和双击
如果单击并在选定单元格上单击,则可以返回true,否则返回false;
检索行和列
int row = ( (JTable) e.getSource() ).rowAtPoint(e.getPoint());
int column = ( (JTable) e.getSource() ).columnAtPoint(e.getPoint());
要启用F2,您可以添加自定义inputMap和actionMap条目
similar too
table.getInputMap().put(KeyStroke.getKeyStroke("DOWN"), "doMyArrowDown");
table.getTable().getActionMap().put("doMyArrowDown", new ArrowDownAction());
从你的行动中,你可以自己解开细胞
table.editCellAt(row, column );
我通过使用Proxy
包装现有的CellEditor
并拦截对isCellEditable
调用,为所有鼠标事件返回false并将所有其他调用委托给原始CellEditor
来解决这个问题。
这比camickr的解决方案稍微复杂一点,但适用于所有编辑器(我总共有4个)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.