![](/img/trans.png)
[英]How to capture the single-click or double-click on window title in JavaFX?
[英]How to edit a JTree node with a single-click
我有一個JTree
,並希望在我單擊一個節點時調用它的getTreeCellEditorComponent()
方法。 根據DefaultTreeCellEditor
類(我擴展)的文檔,“編輯是在三次鼠標點擊,或點擊,暫停,點擊和1200毫秒的延遲后開始的。” 有沒有辦法覆蓋此行為,以便單擊可以啟動編輯過程?
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");
附錄:另請參閱有關可用性的答案 。
從技術上講,您可以將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);
但是,有一個可用性的怪癖,因為現在你不能在沒有開始編輯的情況下選擇 - 這可能是也可能不是你的意圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.