- 浏览: 58024 次
- 性别:
- 来自: 成都
文章分类
最新评论
一。遍历节点
private void visitAllNodes(TreeNode node,List lst){ if(node.getChildCount()>0){ for (Enumeration e = node.children(); e.hasMoreElements();) { MyTreeNode n = (MyTreeNode) e.nextElement(); if (n.getUserObject() instanceof FormStyle) { lst.add(((FormStyle)n.getUserObject())); } visitAllNodes(n,lst); } } }
二。节点上添加复选框
public class TreeIconCellRenderer extends JPanel implements TreeCellRenderer { private JCheckBox check = new JCheckBox(); private CheckBoxTreeLabel label = new CheckBoxTreeLabel(); private final ImageIcon CATALOG_IMG = new ImageIcon(getClass().getResource("/client/system/formtype/resource/folder.gif")); private final ImageIcon CATALOG_OPEN_IMG = new ImageIcon(getClass().getResource("/client/system/formtype/resource/folder-expanded.gif")); private final ImageIcon CLASS_IMG = new ImageIcon(getClass().getResource("/client/system/formtype/resource/parenticon.gif")); private JLabel lblIcon = new JLabel(); public TreeIconCellRenderer() { check.setBackground(UIManager.getColor("Tree.textBackground")); label.setForeground(UIManager.getColor("Tree.textForeground")); setFont(new Font("宋体", 0, 12)); setLayout(new FlowLayout(0, 0, 1));//这几个设置要注意,不然jtree显示样式看起来很别扭 this.label.setFont(new Font("宋体", 0, 12)); this.label.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 0)); this.check.setBorder(BorderFactory.createEmptyBorder(0, 4, 0, 0)); this.check.setMargin(new Insets(0, 0, 0, 0)); add(lblIcon); add(check); add(label); setOpaque(false); label.setBackground(UIManager.getColor("Tree.selectionBackground")); } public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { // super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); String stringValue = tree.convertValueToText(value, sel, expanded, leaf, row, hasFocus); setEnabled(tree.isEnabled()); check.setSelected(((MyTreeNode) value).isSelected()); label.setFont(tree.getFont()); label.setText(stringValue); label.setSelected(sel); label.setFocus(hasFocus); if (sel) { this.label.setOpaque(true); } else { this.label.setOpaque(false); } MyTreeNode node = (MyTreeNode) value; Object obj = node.getUserObject(); lblIcon.setIcon(CATALOG_IMG); if (expanded) { lblIcon.setIcon(CATALOG_OPEN_IMG); } if (obj instanceof FormClass) { lblIcon.setIcon(CLASS_IMG); } if (obj instanceof FormStyle) { lblIcon.setIcon(CLASS_IMG); } label.setText(node.toString()); return this; } } class CheckBoxTreeNodeSelectionListener extends MouseAdapter { public void mouseClicked(MouseEvent event) { JTree tree = (JTree) event.getSource(); int x = event.getX(); int y = event.getY(); int row = tree.getRowForLocation(x, y); TreePath path = tree.getPathForRow(row); if (path != null) { MyTreeNode node = (MyTreeNode) path.getLastPathComponent(); if (node != null) { boolean isSelected = !node.isSelected(); node.setSelected(isSelected); ((DefaultTreeModel) tree.getModel()).nodeStructureChanged(node); } } } }
public class MyTreeNode extends DefaultMutableTreeNode {
private boolean isSelected; public MyTreeNode(Object userObject) { super(userObject); } public boolean isSelected() { return isSelected; } public String toString() { if (userObject != null) { if (userObject instanceof FormCataLog) { FormCataLog catalog = (FormCataLog) userObject; return catalog.getName(); } else if (userObject instanceof FormClass) { FormClass classForm = (FormClass) userObject; return classForm.getName(); } else if (userObject instanceof FormClassItem) { FormClassItem itemForm = (FormClassItem) userObject; return itemForm.getItemlabel(); } else if (userObject instanceof FormStyle) { FormStyle formStyle = (FormStyle) userObject; return formStyle.getName(); } else { return super.toString(); } } return super.toString(); } public void setSelected(boolean _isSelected) { this.isSelected = _isSelected; if (_isSelected) { // 如果选中,则将其所有的子结点都选中 if (children != null) { for (Object obj : children) { MyTreeNode node = (MyTreeNode) obj; if (_isSelected != node.isSelected()) { node.setSelected(_isSelected); } } } // 向上检查,如果父结点的所有子结点都被选中,那么将父结点也选中 MyTreeNode pNode = (MyTreeNode) parent; // 开始检查pNode的所有子节点是否都被选中 if (pNode != null) { int index = 0; for (; index < pNode.children.size(); ++index) { MyTreeNode pChildNode = (MyTreeNode) pNode.children.get(index); if (!pChildNode.isSelected()) { break; } } /* * 表明pNode所有子结点都已经选中,则选中父结点, * 该方法是一个递归方法,因此在此不需要进行迭代,因为 * 当选中父结点后,父结点本身会向上检查的。 */ if (index == pNode.children.size()) { if (pNode.isSelected() != _isSelected) { pNode.setSelected(_isSelected); } } } } else { /* * 如果是取消父结点导致子结点取消,那么此时所有的子结点都应该是选择上的; * 否则就是子结点取消导致父结点取消,然后父结点取消导致需要取消子结点,但 * 是这时候是不需要取消子结点的。 */ if (children != null) { int index = 0; for (; index < children.size(); ++index) { MyTreeNode childNode = (MyTreeNode) children.get(index); if (!childNode.isSelected()) { break; } } // 从上向下取消的时候 if (index == children.size()) { for (int i = 0; i < children.size(); ++i) { MyTreeNode node = (MyTreeNode) children.get(i); if (node.isSelected() != _isSelected) { node.setSelected(_isSelected); } } } } // 向上取消,只要存在一个子节点不是选上的,那么父节点就不应该被选上。 MyTreeNode pNode = (MyTreeNode) parent; if (pNode != null && pNode.isSelected() != _isSelected) { pNode.setSelected(_isSelected); } } } }
public class CheckBoxTreeLabel extends JLabel {
private boolean isSelected; private boolean hasFocus; public CheckBoxTreeLabel() { } public void setBackground(Color color) { if (color instanceof ColorUIResource) { color = null; } super.setBackground(color); } public void paint(Graphics g) { String str; if ((str = getText()) != null) { if (0 < str.length()) { if (isSelected) { g.setColor(UIManager.getColor("Tree.selectionBackground")); } else { g.setColor(UIManager.getColor("Tree.textBackground")); } Dimension d = getPreferredSize(); int imageOffset = 0; Icon currentIcon = getIcon(); if (currentIcon != null) { imageOffset = currentIcon.getIconWidth() + Math.max(0, getIconTextGap() - 1); } g.fillRect(imageOffset, 0, d.width - 1 - imageOffset, d.height); if (hasFocus) { g.setColor(UIManager.getColor("Tree.selectionBorderColor")); g.drawRect(imageOffset, 0, d.width - 1 - imageOffset, d.height - 1); } } } super.paint(g); } public Dimension getPreferredSize() { Dimension retDimension = super.getPreferredSize(); if (retDimension != null) { retDimension = new Dimension(retDimension.width + 3, retDimension.height); } return retDimension; } public void setSelected(boolean isSelected) { this.isSelected = isSelected; } public void setFocus(boolean hasFocus) { this.hasFocus = hasFocus; } }
三。节点上下移动
private void nodeUpMove() { TreePath path = jTree1.getSelectionPath(); Pnode = path.getLastPathComponent(); if (Pnode == null || Pnode == root) { return; } MenuTreeModel DTreeModel = (MenuTreeModel) jTree1.getModel(); int index = DTreeModel.getIndexOfChild(((DefaultMutableTreeNode) Pnode).getParent(), cNode); if (index > 0) { DTreeModel.insertNodeInto((DefaultMutableTreeNode) Pnode, (DefaultMutableTreeNode) ((DefaultMutableTreeNode) Pnode).getParent(), index - 1); } DTreeModel.reload(); TreePath visiblePath = new TreePath( ( (DefaultTreeModel) jTree1.getModel()).getPathToRoot((DefaultMutableTreeNode)Pnode)); jTree1.setSelectionPath(visiblePath); }
private void nodeDownMove() {
TreePath path = jTree1.getSelectionPath(); Pnode = path.getLastPathComponent(); if (Pnode == null || Pnode == root) { return; } MenuTreeModel DTreeModel = (MenuTreeModel) jTree1.getModel(); int index = DTreeModel.getIndexOfChild(((DefaultMutableTreeNode) Pnode).getParent(), Pnode); if (index < ((DefaultMutableTreeNode)Pnode).getParent().getChildCount()-1) { DTreeModel.insertNodeInto((DefaultMutableTreeNode) Pnode, (DefaultMutableTreeNode) ((DefaultMutableTreeNode) Pnode).getParent(), index+1); } DTreeModel.reload(); TreePath visiblePath = new TreePath( ( (DefaultTreeModel) jTree1.getModel()).getPathToRoot((DefaultMutableTreeNode)Pnode)); jTree1.setSelectionPath(visiblePath); }
四。
五。
六。
七。
相关推荐
在IT领域,尤其是在Web开发中,`JTree`是一个常用组件,它用于在用户界面中展示数据的层次结构,比如文件系统、组织架构等。在本案例中,我们讨论的是一个使用JavaScript实现的JTree,这通常是通过HTML、CSS和...
Java Swing库中的`JTree`组件是用于显示和操作树状数据结构的可视化工具。这个组件允许用户以图形化的方式查看层次化的信息,如文件系统目录、数据库结构或者应用程序的对象模型。在Java编程中,理解和掌握`JTree`的...
6. **`JTree`的常用方法** - `addTreeSelectionListener`: 添加树选择监听器。 - `getSelectedNode`: 获取当前选中的节点。 - `expandRow`: 展开指定行的节点。 - `collapseRow`: 折叠指定行的节点。 - `...
以下是在JTree中进行节点操作的一些常用方法: - `TreePath`: 在JTree中,TreePath代表树中一个节点的路径,从根节点开始,以数组的形式表示每个父节点。 - `makeVisible(TreePath path)`: 使JTree的某一个节点可见...
DefaultMutableTreeNode是JTree中常用的模型类,它可以动态地添加、删除和修改节点。然后,他们会将这个树模型(TreeModel)与JTree组件关联起来,通常通过调用`new JTree(model)`来实现。接着,可能还会设置JTree的...
JTree组件的数据模型是TreeModel接口的实现,它定义了树结构的数据和操作。最常用的实现是DefaultTreeModel,它可以容纳任意数量的TreeNode对象,这些节点代表了树结构中的每个元素。TreeNode类可以代表一个叶子节点...
JTree是由TreeNode对象组成的树形结构,TreeNode是树节点的抽象类,它的子类DefaultMutableTreeNode是最常用的实现。每个节点可以有任意数量的子节点,并且可以通过JTree的模型(TreeModel)来添加、删除或修改这些...
这个`treea.rar_jtree_tree_java` 包含了一个名为 `treea.java` 的源代码文件,可能是用于演示如何创建和操作 `JTree` 的实例。`www.pudn.com.txt` 可能是相关资源或者说明文档,但由于我们只关注 `JTree` 的知识点...
最后,设置窗口的基本属性,如大小、位置和关闭操作。 ### `JTree`组件 `JTree`是另一种Swing组件,用于显示层次结构的数据,如文件系统目录结构。其主要特点包括节点展开/折叠、选择和监听事件。 1. **基本概念*...
【JTable和JTree的基本概念】 JTable是Java Swing库中的一个组件,用于展示二维...JTable适用于展示和操作表格形式的数据,而JTree则适用于展示层次关系。理解和熟练使用这两个组件对于开发Java桌面应用是非常关键的。
本资源"利用Swing开发的JAVA常用组件代码fprod-common-7.3.rar"提供了使用Swing开发的一些常见组件的示例代码,这将有助于理解和实践如何在Java程序中创建和操作用户界面。 Swing提供了许多组件,它们是构建用户...
以下是一些Java Swing中常用的组件,以及它们的功能和应用。 1. **JFrame**: JFrame 是一个顶级容器,它用于承载其他的组件。它是大多数Swing应用的基础,因为它提供了一个窗口来展示内容。你可以添加JPanel、...
- 文件系统浏览器:在文件管理器中,树菜单常用来展示目录结构。 - 软件工程:在IDE(如Eclipse, IntelliJ IDEA)中,用于展示项目结构、类层次等。 - 系统配置:配置面板中,树菜单用于组织复杂的设置选项。 5....
10. jtree:jTree是基于jQuery的树形插件,用于在网页上呈现树状数据结构,支持拖放操作、异步加载和自定义节点图标。 11. 常用html控件:这个文件可能包含了其他一些常见的HTML控件示例或代码片段,用于教学或参考...
`dhtmlxTree`和`jtree`是用于显示层次结构数据的控件。它们可以帮助用户以图形化的方式浏览和操作树状结构,比如目录结构、组织结构或分类系统。 4. **标签栏(Tabbar)**: `dhtmlxTabbar`是一个用于创建多标签...
在该示例中,我们使用 JTree 组件来演示拖放操作的实现。用户可以将文本框中的文本拖放到树结构中,实现数据的传输。 Java Swing 中的拖放功能是基于 TransferHandler 机制实现的,支持多种组件,包括 JList、...
3. **DefaultMutableTreeNode**: 这是JTree中最常用的节点类型,可以动态修改。我们可以通过递归方式创建文件系统目录树,每层目录作为一个DefaultMutableTreeNode,子目录和文件作为其子节点。 4. **文件系统API**...
在Java编程领域,树型控件(Tree View)是一种常用的数据可视化组件,它允许用户以层级结构展示数据,常用于文件系统、组织架构或者复杂的分类系统等场景。本压缩包"树型控件 java.rar"包含了一个使用Java实现的树型...
这个压缩包“老外用Swing开发的一些JAVA常用窗口编程组件源码.rar”显然包含了用Swing实现的各种常见GUI组件的源代码,这对于学习和理解Swing以及Java窗口编程非常有帮助。 Swing提供了丰富的组件库,用于构建桌面...
以下是Java Swing中最常用的9种组件,以及它们的使用方法和特点: 1. **JFrame**:作为窗口的基础容器,JFrame是大多数Swing应用的起点。它承载其他组件,并提供关闭、最小化和最大化的窗口操作。创建JFrame时,...