`

可编辑的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节点可编辑

    swing界面设计之JTree

    (五) JTree右键菜单实现编辑、添加、删除节点 63 Test.java源代码 63 (六) 功能齐全的JTree例子 66 TreeEditTest.java源代码 66 (七) JTree控件的使用 70 构造函数: 70 TreeModel接口 70 DefaultTreeModel缺省版本 ...

    Exa2-文本编辑器的设计

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

    JIDE Grids (表格)开发员技术手册

    FilterableTableModel - 可过滤的表模型,支持针对每一列增加过滤功能 HierarchicalTable - 分级表,对表的一行嵌套任何控件作为子控件 row TreeTable - 树形表,联合使用树控件和表控件来显示层次化分级数据 ...

    JAVA_API1.6文档(中文)

    javax.swing.tree 提供处理 javax.swing.JTree 的类和接口。 javax.swing.undo 允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持。 javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 ...

    Infragistics Jsuite--

    我们的JFC树扩展了JTree,添加了高级拖拉功能,内置复选框以及完整的颜色,字体和图像自定义。 Tab 组件 (只用于AWT/JavaBean ) 我们完全自定义tab控件提供了相似页面中便捷的分页方法,以及改良的,容易定制的...

    Java数据库编程宝典2

    10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性...

    Java数据库编程宝典4

    10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性...

    Java数据库编程宝典1

    10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性...

    Java数据库编程宝典3

    10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性...

    java api最新7.0

    javax.swing.tree 提供处理 javax.swing.JTree 的类和接口。 javax.swing.undo 允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持。 javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 ...

    JavaAPI1.6中文chm文档 part1

    javax.swing.tree 提供处理 javax.swing.JTree 的类和接口。 javax.swing.undo 允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持。 javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 ...

    JDK_1_6 API

    javax.swing.tree 提供处理 javax.swing.JTree 的类和接口。 javax.swing.undo 允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持。 javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 ...

    JavaAPI中文chm文档 part2

    javax.swing.tree 提供处理 javax.swing.JTree 的类和接口。 javax.swing.undo 允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持。 javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 ...

    [Java参考文档]

    javax.swing.tree 提供处理 javax.swing.JTree 的类和接口。 javax.swing.undo 允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持。 javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 ...

    [Java参考文档].JDK_API 1.6

    javax.swing.tree 提供处理 javax.swing.JTree 的类和接口。 javax.swing.undo 允许开发人员为应用程序(例如文本编辑器)中的撤消/恢复提供支持。 javax.transaction 包含解组期间通过 ORB 机制抛出的三个异常。 ...

    javaSE代码实例

    17.1.5 可变尺寸线程池的使用 378 17.1.6 延迟线程池的使用 380 17.1.7 使用自定义参数的线程池 381 17.2 有返回值的线程调用 384 17.2.1 Callable接口简介 384 17.2.2 Future接口简介 384 17.2.3 ...

Global site tag (gtag.js) - Google Analytics