我正在使用 Eclipse,我有一个关于 JXTreeTables 的问题。我希望在双击节点时弹出一个窗口,显示有关节点的一些信息。现在,如果单击不是直接在节点上,是否可以获得 JXTreeTable 的双击节点或 null?
user107043
问问题
1493 次
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 回答