`

可编辑的JTree

 
阅读更多
package PreD;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

public class TreeEditFrame extends JFrame implements ActionListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public static void main(String[] args) {
		JFrame frame = new TreeEditFrame();
		frame.setVisible(true);
	}

	public TreeEditFrame() {
		setTitle("TreeEditTest");
		setSize(300, 200);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		// construct tree
		TreeNode root = makeSampleTree();
		model = new DefaultTreeModel(root);
		tree = new JTree(model);
		tree.setEditable(true);

		// add scroll pane with tree to content pane
		Container contentPane = getContentPane();
		JScrollPane scrollPane = new JScrollPane(tree);
		contentPane.add(scrollPane, "Center");

		// make button panel
		JPanel panel = new JPanel();
		addSiblingButton = new JButton("Add Sibling");
		addSiblingButton.addActionListener(this);
		panel.add(addSiblingButton);
		addChildButton = new JButton("Add Child");
		addChildButton.addActionListener(this);
		panel.add(addChildButton);
		deleteButton = new JButton("Delete");
		deleteButton.addActionListener(this);
		panel.add(deleteButton);
		contentPane.add(panel, "South");
	}

	public TreeNode makeSampleTree() {
		DefaultMutableTreeNode root = new DefaultMutableTreeNode("World");
		DefaultMutableTreeNode country = new DefaultMutableTreeNode("USA");
		root.add(country);
		DefaultMutableTreeNode state = new DefaultMutableTreeNode("California");
		country.add(state);
		DefaultMutableTreeNode city = new DefaultMutableTreeNode("San Jose");
		state.add(city);
		city = new DefaultMutableTreeNode("Cupertino");
		state.add(city);
		state = new DefaultMutableTreeNode("Michigan");
		country.add(state);
		city = new DefaultMutableTreeNode("Ann Arbor");
		state.add(city);
		country = new DefaultMutableTreeNode("Germany");
		root.add(country);
		state = new DefaultMutableTreeNode("Schleswig-Holstein");
		country.add(state);
		city = new DefaultMutableTreeNode("Kiel");
		state.add(city);
		return root;
	}

	public void actionPerformed(ActionEvent event) {
		DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree
				.getLastSelectedPathComponent();
		if (selectedNode == null) {
			return;
		}
		if (event.getSource().equals(deleteButton)) {
			if (selectedNode.getParent() != null) {
				model.removeNodeFromParent(selectedNode);
			}
			return;
		}
		// add new node as sibling or child
		DefaultMutableTreeNode newNode = new DefaultMutableTreeNode("New");

		if (event.getSource().equals(addSiblingButton)) {
			DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode
					.getParent();
			if (parent != null) {
				int selectedIndex = parent.getIndex(selectedNode);
				model.insertNodeInto(newNode, parent, selectedIndex + 1);
			}
		} else if (event.getSource().equals(addChildButton)) {
			model.insertNodeInto(newNode, selectedNode,
					selectedNode.getChildCount());
		}
		// now display new node
		TreeNode[] nodes = model.getPathToRoot(newNode);
		TreePath path = new TreePath(nodes);
		tree.scrollPathToVisible(path);
	}

	private DefaultTreeModel model;
	private JTree tree;
	private JButton addSiblingButton;
	private JButton addChildButton;
	private JButton deleteButton;
}
 
分享到:
评论

相关推荐

    jtree节点可编辑

    当我们说"jtree节点可编辑",这意味着我们正在讨论如何允许用户修改JTree中的节点文本或者进行其他交互式操作。这通常是通过实现特定的监听器和自定义模型来实现的。下面将详细阐述这一主题。 首先,JTree组件默认...

    JAVA JTREE JTABLE实例代码

    总之,JTree和JTable是Java GUI编程中不可或缺的工具,熟练掌握它们的使用能够极大地提升开发效率,提供用户友好的数据展示界面。通过实践和研究提供的实例代码,开发者可以深入理解这两个组件的工作原理,从而更好...

    JTree的实现代码

    实现JTree还可以包含许多扩展功能,如拖放排序、搜索、节点编辑等,这些都需要额外的JavaScript逻辑和可能的库支持。 总的来说,实现一个JTree涉及前端开发的多个方面,包括HTML布局、CSS样式、JavaScript编程以及...

    Java JTree+JTable应用

    而`JSplitPane`是一个布局管理器,用于将两个组件(如`JTree`和`JTable`)放置在一个可调整大小的分隔面板中,用户可以根据需要调整两个部分的大小。 在Eclipse环境中,这是一个Maven项目,这意味着它依赖于Maven...

    JTree的Doc文档

    5. **定制行为**:`JTree`提供了很多方法来定制其行为,如`setEditable()`(设置是否允许编辑节点)、`setShowsRootHandles()`(显示或隐藏根节点的手柄)。 6. **遍历和访问节点**:可以使用`TreePath`和`...

    (一)如何使用JTree

    JTree还可以设置各种属性,例如是否显示线条、是否允许编辑节点等: ```java jTree.setShowsRootHandles(true); // 显示展开/折叠图标 jTree.setEditable(true); // 允许编辑节点 ``` 为了响应用户的交互,比如...

    java Swing JTree的教程实例

    JTree支持编辑节点的文本,需要启用`JTree`的编辑功能。这通常通过设置`TreeCellEditor`和`TreeCellRenderer`来实现。在日志管理系统中,可能需要编辑节点以更新日志条目。要实现编辑,可以调用`JTree`的`...

    JTable_JTree.rar_JTable Java_JTree JTable_jtree

    总之,`JTable`和`JTree`是Java Swing中不可或缺的组件,用于展示和操作表格及树形数据。通过理解和实践,开发者能够构建出交互性强、功能丰富的桌面应用程序。在“JTable_JTree.rar”中,你将找到相关的示例代码,...

    swing界面设计之JTree

    **TreeEditTest.java源代码**:示例代码展示了如何使用JTree进行复杂的树结构操作,包括编辑、添加、删除等。 #### (七) JTree控件的使用 **构造函数**:提供了不同的构造函数用于初始化JTree。 - **TreeModel接口...

    用XML来配置的多级目录树菜单插件JTree2.0

    使用XML配置的优点在于它与编程语言无关,易于编辑和维护,同时也方便了程序解析和生成菜单结构。 **多级目录树**: 多级目录树是指菜单结构中包含多个层级的树形结构。这种结构使得复杂的菜单系统能够有条理地呈现...

    Login_Java.rar_The Given_jtree

    同时,JTree还支持通过CellEditor进行编辑操作,让用户可以直接在树中修改节点内容。 5. **拖放操作** JTree支持拖放操作,通过实现DragSource和DropTarget接口,可以实现节点的移动和复制。 6. **性能优化** ...

    JavaSwing中的JTree模型.pdf

    JTree 模型的主要组成部分包括树节点、树模型和树细胞编辑器。树节点是树的基本组成单元,可以是文件夹或树叶。树模型是 JTree 的核心,负责管理树的结构和节点的关系。树细胞编辑器是 JTree 的可视化组件,负责将树...

    java cs编程 jtree jtable file dom xml GridBagPanel

    通过DocumentBuilder,你可以将XML文档解析为一个可遍历的节点树。每个节点代表XML文档的一部分,可以进行查找、修改、删除等操作。DOM适合处理小型或中型XML文件,因为其将整个文件加载到内存中。 **GridBagLayout...

    Java Swing中的表格(JTable)和树(JTree)组件使用实例

    - `isCellEditable(int row, int col)`:检查单元格是否可编辑。 4. **综合案例**: - 示例代码1展示了如何创建一个带有默认数据的`JTable`。首先,定义列名和数据,然后创建`DefaultTableModel`,并将其传递给`...

    Jtable和JTree的写法示例代码

    `createJTable`方法中,首先创建了一个`DefaultTableModel`,然后初始化了一个JTable实例,并覆盖了`isCellEditable`方法,使得表格的所有单元格都不可编辑。接着,添加了鼠标监听器,以便捕获单元格的点击事件。 ...

    instrument/JTree-开源

    然而,标准的JTree组件虽然功能强大,但在某些高级功能上可能显得不足,例如拖放操作、树结构的动态重组、节点名称的编辑以及撤销/重做功能。为了解决这些问题,开源社区提供了一个名为`instrument/JTree`的扩展库,...

    学员信息管理系统

    4. 信息编辑:更新或修改学员的个人资料。 5. 删除功能:移除不再需要的学员记录。 6. 报表和统计:生成关于学员的统计报告,如按班级人数统计,或者年龄分布图。 系统可能还采用了模型-视图-控制器(MVC)设计模式...

    Exa2-文本编辑器的设计

    本文本编辑器的开发主要包括界面窗口的菜单栏和工具栏以及树结构,还有链接Java虚拟机实现编译与运行。...JTree的setEditable方法设置树不可编辑。 初始化控制台的文本域consoleTextArea,用于输出编译和运行Java的

    checknode(树型)

    5. **可编辑性**:在某些情况下,用户可能需要添加、删除或重命名节点。 总的来说,"checknode(树型)"是Java Swing中的一个增强功能,允许用户通过复选框与JTree交互。通过自定义渲染器和节点类,我们可以实现...

    java treetable实现

    这个模型需要提供关于树节点的信息,包括节点的子节点数量、获取特定列的数据以及节点是否可编辑等。 4. **AbstractTreeTableModel**: 这可能是实现TreeTableModel的一个抽象基类,提供了一些基本的实现,使得...

Global site tag (gtag.js) - Google Analytics