JTree禁用/覆盖TransferHandler键盘操作

时间:2013-01-02 09:05:41

标签: java swing jtree drag-and-drop key-events

我需要摆脱我用于JTree的TransferHandler类的标准键盘操作处理程序。 JTree实现了访问级机制,该机制控制是否可以删除节点。使用shift-delete等键盘组合可以忽略此行为,从而允许每个用户从JTree中删除任何节点。

基本上我需要TransferHandler来提供移动和排序节点(DnD)的便捷方式。就是这样。

提前致谢。

2 个答案:

答案 0 :(得分:5)

您可以通过从ActionMap

中删除密钥默认绑定来删除它们

这样的事情:

ActionMap actionMap = tree.getActionMap();
actionMap.remove("cut");
actionMap.getParent().remove("cut");
actionMap.remove("copy");
actionMap.getParent().remove("copy");
actionMap.remove("paste");
actionMap.getParent().remove("paste");

答案 1 :(得分:3)

编辑:我迟到了,lbalazscs已在上面提出过。

您可以尝试这样的事情:

JTree tree = new JTree();
tree.setDragEnabled(true);
tree.setDropMode(DropMode.ON_OR_INSERT);
tree.setTransferHandler(new YourTreeTransferHandler());
//......
Object key = TransferHandler.getCutAction().getValue(Action.NAME);
System.out.println(key);
tree.getActionMap().put(key, new AbstractAction() {
  @Override public void actionPerformed(ActionEvent e) {
    System.out.println("dummy");
  }
});