5

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

4

2 回答 2

4

我收到了关于 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();
    }
});
于 2012-02-03T23:40:04.300 回答
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);

只是为了记录,在 java.net 上的 Swinglabs 论坛中有一个并行线程

编辑

假设的困境;-)

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

于 2012-02-02T13:10:21.760 回答