文档章节

可编辑的JTree

ruyees
 ruyees
发布于 2014/10/05 11:47
字数 312
阅读 21
收藏 0
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;
}
 

本文转载自:http://zuoqiang.iteye.com/blog/1336802

共有 人打赏支持
ruyees
粉丝 3
博文 71
码字总数 0
作品 0
深圳
产品经理
在开发过程中调试报表插件详细教程

背景说明 目前插件开发调试非常麻烦,需要修改代码,编译出class,重新打插件包。然后删除以前的,安装最新的。过程繁杂,而且不能调试,十分不方便。那么我就来教会大家如何可以调试插件。 ...

九月你好123
2015/07/29
0
0
将 JTree 中的 TreeNode 和 TreePath 关连起来

DefaultMutableTreeNode node;//.... 将node加入到JTree以及其他操作 //根据 node 获取 TreePathTreePath treePath = new TreePath(node.getPath());// 可进行 isCollapsed collapsePath 等操......

Kooosy
2013/09/22
0
0
swing 组价和容器——java swing 组件和技术(中)

固执地去写完自己剩下的java swing总结,相信时间会见证我的成长。 一、 swing组件和容器概览 1.顶层容器(JFrame,JDialog,JApplet) JFrame—框架,主要用来设计应用程序的图像界面 JDia...

静心天涯
2013/06/16
0
3
开发可编辑的JTree,求指导。。。。

因为项目的要求,需要用java开发一个能够像JTree那样下拉式的树形结构,但是可以批量的删除,树形结构的节点。看到java.swing.Jtree有这样的结构,但是不符合要求,有没有大神给指导一下,应...

竹林草
2013/10/03
99
1
SWT、Swing 或 AWT:哪个更适合您?

在为新应用程序选择 GUI 工具包时应该考虑哪些因素? Barry Feigenbaum (feigenba@us.ibm.com), 编程顾问, IBM 本文通过对 Eclipse 的 SWT 和 Java Swing、Abstract Windows Toolkit(AWT)G...

晨曦之光
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

百度贴吧发送gif图片的限制

百度贴吧中不可以发送超过500k的gif图片,同时尺寸不能超过700个像素。

gugudu
20分钟前
1
0
eclipse中查找所有汉字

今天遇到需要对中文翻译为英文的情况,需要查找一下项目中出现的所有汉字。我们可以使用快捷键Ctrl+H,在搜索一栏输入:[^\x00-\xff],记得勾选正则表达式。 备注: [\x00-\xff] 是 0 - 255的...

hengbao5
21分钟前
2
0
HBase常用操作命令

HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源实现,...

飓风2000
25分钟前
1
0
天创恒达TC TC6C0更新固件包

天创恒达TC TC6C0 升级完 登录密码 admin、000000

yizhichao
27分钟前
1
0
阿里云总裁胡晓明:“这些新杭州故事,明天将会在更多城市发生”

摘要: 9月19日,2018杭州·云栖大会现场,杭州城市大脑2.0正式发布,管辖范围扩大28倍,覆盖面积增至420平方公里,相当于65个西湖大小。 ET城市大脑等数字化城市解决方案,掀开了“杭州故事...

阿里云官方博客
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部