我有一个JTree
, 并且希望getTreeCellEditorComponent()
在我单击一个节点时调用它的方法。根据DefaultTreeCellEditor
该类的文档(我对其进行了扩展),“在单击三次鼠标或单击、暂停、单击并延迟 1200 毫秒后开始编辑。” 是否有某种方法可以覆盖此行为,以便单击即可开始编辑过程?
问问题
5348 次
2 回答
5
JTree
API 建议使用,MouseListener
但键绑定也很方便。此示例调用startEditingAtPath()
并绑定到 Enter 键:
final JTree tree = new JTree();
tree.setEditable(true);
MouseListener ml = new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
int row = tree.getRowForLocation(e.getX(), e.getY());
TreePath path = tree.getPathForLocation(e.getX(), e.getY());
if (row != -1) {
if (e.getClickCount() == 1) {
tree.startEditingAtPath(path);
}
}
}
};
tree.addMouseListener(ml);
tree.getInputMap().put(
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "startEditing");
附录:另见这个关于可用性的答案。
于 2013-03-26T11:49:19.397 回答
4
从技术上讲,您可以继承 DefaultTreeCellEditor 并调整其逻辑以在第一次单击时开始编辑:
JTree tree = new JTree();
tree.setEditable(true);
TreeCellEditor editor =
new DefaultTreeCellEditor(tree, (DefaultTreeCellRenderer) tree.getCellRenderer()) {
@Override
protected boolean canEditImmediately(EventObject event) {
if((event instanceof MouseEvent) &&
SwingUtilities.isLeftMouseButton((MouseEvent)event)) {
MouseEvent me = (MouseEvent)event;
return ((me.getClickCount() >= 1) &&
inHitRegion(me.getX(), me.getY()));
}
return (event == null);
}
};
tree.setCellEditor(editor);
但是,有一个可用性怪癖,因为现在您无法在不开始编辑的情况下进行选择 - 这可能是您的意图,也可能不是。
于 2013-03-26T13:11:35.427 回答