使JTable单元编辑,但不通过双击
-
13-09-2019 - |
题
我想添加一个列 JTable
与以下行为(类似于Windows资源管理器和类似的炮弹):
- 细胞可以被点击一次选择,作为通常的。
- 该单元可以通过双击执行一个单独的行动(启动一个外部程序。)
- 该单元价值(a string)仍然可以进行编辑,通过单一击的第二时间(在暂停之后),或按 F2 当时该单元突出显示。
双击必须 不 触发的编辑的细胞,但是我想留下任何其他编辑默认触发器操作,如果可能的。
我已经尝试增加一个 MouseListener
表,和消耗的所有 MouseEvent
s,但是,这不起作用-如果我回来 true
从 isCellEditable()
然后我的监听器从来没有收到任何击事件,但是如果我回来 false
然后 F2 不再工作。
这可实现使用仅事件的听众?我宁愿不要惹PLAF功能,如果我可以避免它。
解决方案
你将必须使自己的cellEditor和ovveride
public boolean isCellEditable( EventObject e )
你可以区分单和双击与clickCount在eventObject
如果它是一个单一的点击及其在选定的细胞可以返回真正的无return false;
检索的行列
int row = ( (JTable) e.getSource() ).rowAtPoint(e.getPoint());
int column = ( (JTable) e.getSource() ).columnAtPoint(e.getPoint());
使F2你可以添加自定义的inputMap en actionMap项
similar too
table.getInputMap().put(KeyStroke.getKeyStroke("DOWN"), "doMyArrowDown");
table.getTable().getActionMap().put("doMyArrowDown", new ArrowDownAction());
和你的动作你可以那么火的cellediting自己
table.editCellAt(row, column );
其他提示
该DefaultCellEditor有setClickCountToStart()方法来控制鼠标点击进行编辑。默认的是2。改变这将不会影响F2功能。
因此可以设置的编辑是一个三点击。
不确定到底如何处理两个单点击开始编辑的但是我猜你会用一个计时器,以跟踪第一次点击,然后做的编辑如果第二次点击是在你的时间间隔。
我已经解决了这个通过包装的现有 CellEditor
与 Proxy
并且拦截电话来 isCellEditable
, 回虚假的所有老鼠的事件和委托所有的其他调用,原始 CellEditor
.
这个稍微更加复杂camickr的解决方案,但适用于所有编辑人员(我有4个在所有的.)