簡體   English   中英

如何通過單擊編輯JTree節點

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM