制作一个JTable细胞可编辑的 - 但*不通过双击
我试图将列添加到一个JTable
有以下行为(类似于Windows资源管理器和类似贝壳)*:制作一个JTable细胞可编辑的 - 但*不通过双击
- 细胞可以是像往常一样点击一次以选择它。
- 可以双击单元格以执行单独的操作(启动外部程序)。
- 单元格值(字符串)仍然可以通过单击第二次(暂停后)或在单元格高亮显示时按F2。
双击要不细胞触发的编辑,但我想离开,如果可能的任何其他默认编辑触发操作。
我曾尝试加入MouseListener
表,并消耗所有MouseEvent
S,但这并不工作 - 如果我从isCellEditable()
回到true
那么我的听众从来没有收到任何点击事件,但如果我回到false
然后F2没有更长的作品。
这可以通过只使用事件侦听器来实现吗?如果我能避免它,我宁愿不要惹恼PLAF功能。
你将不得不作出自己的cellEditor的和ovveride
public boolean isCellEditable(EventObject e)
您可以单人和双人的点击之间,就在eventObject
使用clickCount区分。如果它是一个单一的点击和对选定的cell可以返回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());
,并从你的行动,你可以随后击发cellediting自己
table.editCellAt(row, column);
这与我对代理所做的相似。我只重写isCellEditable。关键笔画处理程序包含在默认编辑器中。我不需要重新实现它。 – finnw 2009-08-13 08:08:45
DefaultCellEditor有一个setClickCountToStart()方法来控制鼠标点击进行编辑。默认值是2.更改这将不会影响F2功能。
因此,您可以将编辑设置为三次点击。
不确定如何处理两个单击来开始编辑,但我想你会使用一个计时器来跟踪第一次点击,然后做编辑,如果第二次单击是在你的时间间隔内。
无需定时器 - 它只是需要为双击注册太慢。 – finnw 2009-08-12 20:57:54
我已经用Proxy
包装现有CellEditor
和拦截来电isCellEditable
,返回所有的鼠标事件虚假和委托其他所有调用原CellEditor
解决了这个。
这比camickr的解决方案稍微复杂一点,但适用于所有编辑(我总共有4个。)
[这里](http://stackoverflow.com/a/25919008/738017)存在由[camickr](更近的答案http://stackoverflow.com/users/131872/camickr),其解决了4行代码的问题。 – 2015-02-22 21:49:27