2

在 GUI 中,我JTreeJPanel. 现在对于每个Node(leaf),鼠标右键单击我想显示JPopup菜单,要求Node在右侧显示统计信息JPanel

由于我是摇摆新手,任何人都可以帮助编写代码。提前致谢。

问候,图沙尔·多迪亚。

4

3 回答 3

3

似乎引起了一些混乱(让我自己感到困惑;-) - 所以这里有一个代码片段,用于对 componentPopup 进行目标位置相关配置

    JPopupMenu popup = new JPopupMenu();
    final Action action = new AbstractAction("empty") {

        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
        }
    };
    popup.add(action); 
    JTree tree = new JTree() {

        /** 
         * @inherited <p>
         */
        @Override
        public Point getPopupLocation(MouseEvent e) {
            if (e != null) {
               TreePath path = getClosestPathForLocation(e.getX(), e.getY());
               action.putValue(Action.NAME, String.valueOf(path.getLastPathComponent()));
               return e.getPoint();
            }
            action.putValue(Action.NAME, "no mouse"); 
            return null;
        }

    };
    tree.setComponentPopupMenu(popup);
于 2011-06-23T08:25:50.073 回答
3

使用 JTree 的方法

public TreePath getPathForLocation(int x, int y)

然后是树路径

public Object getLastPathComponent()

从用户右键单击的位置返回您想要的节点。

于 2011-06-22T07:31:59.423 回答
0

我采用了@kleopatra 解决方案并稍作更改。也许这不是最好的方法,但对我有用。

JTree tree = new JTree() {
    private static final long serialVersionUID = 1L;
    @Override public Point getPopupLocation(MouseEvent e) {
        if (e == null) return new Point(0,0);
        TreePath path = getClosestPathForLocation(e.getX(), e.getY());
        Object selected = path != null ? path.getLastPathComponent() : null;
        setComponentPopupMenu(getMenuForTreeNode(getComponentPopupMenu(), selected));
        setSelectionPath(path);
        return e.getPoint();
    }
};



public JPopupMenu getMenuForTreeNode(JPopupMenu menu, Object treeNode) {
    if (menu == null) menu = new JPopupMenu("Menu:");
    menu.removeAll();
    if (treeNode instanceof MyTreeItem) {
        menu.add(new JMenuItem("This is my tree item: " + treeNode.toString()));
    }
    return menu;
}
于 2012-12-13T21:24:45.923 回答