簡體   English   中英

雙擊一個JTree節點並獲取其名稱

[英]Double-click a JTree node and get its name

如何雙擊JTree節點並獲取其名稱?

如果我調用evt.getSource() ,似乎返回的對象是JTree。 我無法將其強制轉換為DefaultMutableTreeNode。

Java文檔

如果您有興趣檢測雙擊事件或用戶單擊節點時,無論是否選擇了該節點,我們建議您執行以下操作:

final JTree tree = ...;

MouseListener ml = new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
        int selRow = tree.getRowForLocation(e.getX(), e.getY());
        TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
        if(selRow != -1) {
            if(e.getClickCount() == 1) {
                mySingleClick(selRow, selPath);
            }
            else if(e.getClickCount() == 2) {
                myDoubleClick(selRow, selPath);
            }
        }
    }
};
tree.addMouseListener(ml);

要從TreePath獲取節點,您可以遍歷路徑,或者簡單地使用TreePath#getLastPathComponent

這將返回一個Object ,因此您需要自己回退到所需的節點類型。

以下代碼對我有用。

tree.addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent e) {
            if (e.getClickCount() == 2) {
                DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                       tree.getLastSelectedPathComponent();
                if (node == null) return;
                Object nodeInfo = node.getUserObject();
                // Cast nodeInfo to your object and do whatever you want
            }
        }
    });

MadProgrammer涵蓋了幾乎所有內容。 要獲取對象,您可以調用

DefaultMutableTreeNode selectedNode =
   ((DefaultMutableTreeNode)selPath.getLastPathComponent()).
   getUserObject();

我的例子。 我們可以檢測到雙擊延遲。

public class TreeListener extends MouseAdapter{
    private JTree _Tree;
    private boolean singleClick  = true;
    private int doubleClickDelay = 300;
    private Timer timer;    

    public TreeListener(JTree tree)
    {
        this._Tree = tree;
        ActionListener actionListener = new ActionListener() {

            public void actionPerformed(ActionEvent e) {                
                timer.stop();
                if (singleClick) {
                    singleClickHandler(e);
                } else {
                    try {
                        doubleClickHandler(e);
                    } catch (ParseException ex) {
                        Logger.getLogger(ex.getMessage());
                    }
                }
            }
        }; 
        timer = new javax.swing.Timer(doubleClickDelay, actionListener);
        timer.setRepeats(false);
    }

    public void mouseClicked(MouseEvent e) { 
        if (e.getClickCount() == 1) {
            singleClick = true;
            timer.start();
        } else {
            singleClick = false;
        }
    }

     private void singleClickHandler(ActionEvent e) {
        System.out.println("-- single click --");
    }

     private void doubleClickHandler(ActionEvent e) throws ParseException {         
        System.out.println("-- double click -- id=");      

    }     
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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