java组件JTree问题

2024年11月16日 00:23
有1个网友回答
网友(1):

和使用树的示例,请参阅《The Java Tutorial》中的 How to Use Trees 一节。

树中特定的节点可以由 TreePath(封装节点及其所有祖先的对象)标识,或由其显示行(其中显示区域中的每一行都显示一个节点)标识。展开 节点是一个非叶节点(由返回 false 的 TreeModel.isLeaf(node) 标识),当展开 其所有祖先时,该节点将显示其子节点。折叠 节点是隐藏它们的节点。隐藏 节点是位于折叠祖先下面的节点。所有可查看 节点的父节点都是可以展开的,但是可以显示它们,也可以不显示它们。显示 节点是可查看的并且位于可以看到它的显示区域。

以下 JTree 方法使用 "visible" 来表示 "displayed":

isRootVisible()
setRootVisible()
scrollPathToVisible()
scrollRowToVisible()
getVisibleRowCount()
setVisibleRowCount()
下一组 JTree 方法使用 "visible" 表示 "viewable"(在展开的父节点下面):

isVisible()
makeVisible()
如果您有兴趣了解选择何时更改,请实现 TreeSelectionListener 接口,并使用方法 addTreeSelectionListener 添加实例。当选择更改时,将调用 valueChanged,即如果用户在同一节点上单击两次,则仅调用 valueChanged 一次。

如果有兴趣检测双击事件或用户何时单击节点(不管是否选中它),建议您执行以下操作:

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);
注:上述示例同时获取路径和行,但是您只需要获取感兴趣的内容。
要使用 JTree 显示复合节点(例如,同时包含图形图标和文本的节点),请为 TreeCellRenderer 创建子类,并使用 setCellRenderer(javax.swing.tree.TreeCellRenderer) 通知树使用它。要编辑此类节点,请为 TreeCellEditor 创建子类,并使用 setCellEditor(javax.swing.tree.TreeCellEditor)。

与所有 JComponent 类一样,可以使用 InputMap 和 ActionMap 将 Action 对象与 KeyStroke 关联,并在指定条件下执行操作!!