【问题标题】:How to get a double-clicked TreeTableNode?如何获得双击的TreeTableNode?
【发布时间】:2012-02-21 23:09:42
【问题描述】:

我正在使用 Eclipse,我有一个关于 JXTreeTables 的问题。我希望在双击节点时弹出一个窗口,显示有关节点的一些信息。现在,如果单击不是直接在节点上,是否可以获得 JXTreeTable 的双击节点或 null?

【问题讨论】:

    标签: java swing swingx jxtreetable


    【解决方案1】:

    我收到了关于 kleopatra 提到的线程的答案,它工作得非常好并且更简单。代码如下:

    treeTable.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(final MouseEvent e) {
            if (e.getClickCount() != 2) {
                return;
            }
    
            final int rowIndex = treeTable.rowAtPoint(e.getPoint());
    
            if (rowIndex < 0) {
                return;
            }
    
            final TreeTableNode selectedNode = (TreeTableNode)treeTable.getPathForRow(rowIndex).getLastPathComponent();
        }
    });
    

    【讨论】:

    • 很高兴你有一个解决方案 :-) 请注意:这样监听器将在包含节点的表格单元格中双击 anywhere 时触发,而不仅仅是在 直接在节点上(又名:它的文本)。
    • 这是我的意图,但还是非常感谢您的回答:)!
    【解决方案2】:

    假设您的意思是 tree.getRowForLocation(...) 的行为:treeTable 上没有 api,您遇到缺少 api 并可能考虑在 swingx 问题跟踪器中提交改进问题 :-)

    在它可用之前,您必须自己在委托给相应树方法的自定义 MouseListener 中完成。在将分层列的渲染器类型转换为 JTree 时稍微有点(咳嗽..):

        MouseListener l = new MouseAdapter() {
    
            @Override
            public void mouseClicked(MouseEvent e) {
                if (e.getClickCount() != 2) return;
                int column = treeTable.columnAtPoint(e.getPoint());
                if (!treeTable.isHierarchical(column)) return;
                Rectangle cell = treeTable.getCellRect(0, column, false);
                JXTree tree = (JXTree) treeTable.getCellRenderer(0, column);
                // translate x to tree coordinates
                int translatedX = e.getX() - cell.x;
                int row = tree.getRowForLocation(translatedX, e.getY());
                LOG.info("row " + row);
            }
    
        };
        treeTable.addMouseListener(l);
    

    仅作记录,Swinglabs forum over at java.net 中有一个并行线程

    编辑

    假设的困境 ;-)

    使用 OP 自己的答案,侦听器将在包含节点的表格单元格中双击 anywhere 时触发,而不仅仅是在节点上 直接 时触发(又名:其文本)。事实证明,与假定的 tree.getRowForLocation(..) 相比,该要求更符合 tree.getClosestRowForLocation(..) 的要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多