JTree





http://www.easyicon.net/
package swing.tree; import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Field;
import java.util.Enumeration; import javax.lang.model.element.Modifier;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel; /*2015-7-11*/
public class ClassTree {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() { @Override
public void run() {
ClassTreeFrame frame = new ClassTreeFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
}
}); } } class ClassTreeFrame extends JFrame {
private static final long serialVersionUID = 3866055150465649395L; private DefaultMutableTreeNode root;
private DefaultTreeModel model;
private JTree tree;
private JTextField textField;
private JTextArea textArea;
private static final int DEFAULT_WIDTH = 800;
private static final int DEFAULT_HEIGHT = 600; public ClassTreeFrame() {
setTitle(getClass().getSimpleName());
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
root = new DefaultMutableTreeNode(java.lang.Object.class);
model = new DefaultTreeModel(root);
tree = new JTree(model); addClass(getClass()); ClassNameTreeCellRender render = new ClassNameTreeCellRender();
String filename = getClass().getResource("/swing/tree/red-ball.gif").getPath();
render.setClosedIcon(new ImageIcon(filename));
filename = getClass().getResource("/swing/tree/yellow-ball.gif").getPath();
render.setOpenIcon(new ImageIcon(filename));
filename = getClass().getResource("/swing/tree/blue-ball.gif").getPath();
render.setLeafIcon(new ImageIcon(filename));
tree.setCellRenderer(render); tree.addTreeSelectionListener(new TreeSelectionListener() { @Override
public void valueChanged(TreeSelectionEvent e) { TreePath path = tree.getSelectionPath();
if (path == null) {
return;
}
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) path.getLastPathComponent();
Class<?> c = (Class<?>) selectedNode.getUserObject();
String description = getFileDescription(c);
textArea.setText(description);
}
}); int mode = TreeSelectionModel.SINGLE_TREE_SELECTION;
tree.getSelectionModel().setSelectionMode(mode); textArea = new JTextArea(); JPanel panel = new JPanel();
panel.setLayout(new GridLayout(1, 2));
panel.add(new JScrollPane(tree));
panel.add(new JScrollPane(textArea)); add(panel, BorderLayout.CENTER); addTextField(); } private void addTextField() {
JPanel panel = new JPanel();
ActionListener addListener = new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
try {
String text = textField.getText();
addClass(Class.forName(text));
textField.setText("");
} catch (ClassNotFoundException e1) {
JOptionPane.showMessageDialog(ClassTreeFrame.this, e1.getMessage());
}
}
}; textField = new JTextField(20);
textField.addActionListener(addListener);
panel.add(textField); JButton addButton = new JButton("Add");
addButton.addActionListener(addListener);
panel.add(addButton);
add(panel, BorderLayout.SOUTH); } protected String getFileDescription(Class<?> c) {
StringBuilder r = new StringBuilder();
Field[] fields = c.getDeclaredFields();
for (Field field : fields) {
if (field.getModifiers() == Modifier.STATIC.ordinal()) {
r.append("static");
}
r.append(field.getType().getName())
.append("")
.append(field.getName())
.append("\n"); } return r.toString();
} private DefaultMutableTreeNode addClass(Class<?> c) {
if (c.isInterface() || c.isPrimitive()) {
return null;
} DefaultMutableTreeNode node = findUserObject(c);
if (node != null) {
return node;
} Class<?> s = c.getSuperclass();
DefaultMutableTreeNode parent;
if (s == null) {
parent = root;
} else {
parent = addClass(s);
} DefaultMutableTreeNode newChild = new DefaultMutableTreeNode(c);
model.insertNodeInto(newChild, parent, parent.getChildCount()); TreePath path = new TreePath(model.getPathToRoot(newChild));
tree.makeVisible(path);
return newChild;
} private DefaultMutableTreeNode findUserObject(Object obj) {
@SuppressWarnings("unchecked")
Enumeration<TreeNode> e = root.breadthFirstEnumeration();
while (e.hasMoreElements()) {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) e.nextElement();
if (node.getUserObject().equals(obj)) {
return node;
}
}
return null;
} } class ClassNameTreeCellRender extends DefaultTreeCellRenderer {
private static final long serialVersionUID = -2145290206168596413L;
private Font plainFont;
private Font italicFont; @Override
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel,
boolean expanded, boolean leaf, int row, boolean hasFocus) { Component comp = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Class<?> c = (Class<?>) node.getUserObject(); if (plainFont == null) {
plainFont = getFont();
if (plainFont == null) {
italicFont = plainFont.deriveFont(Font.ITALIC);
}
} if (c.getModifiers() == Modifier.ABSTRACT.ordinal()) {
setFont(plainFont);
} else {
comp.setFont(italicFont);
} return comp;
} }
JTree的更多相关文章
- JTree实现好友列表
最近学习了一下JTree的使用方法: 先来看一下树的实例: 构建一个树, DefaultMutableTreeNode root = new DefaultMutableTreeNode(" ...
- Java — JTree and JTable以及sqlServer的两种连接
使用JTree的步骤: 暂时只能创建一个头结点,创建一个树的结点作为头结点(其子结点也是相同的创建方法):DefaultMutableTreeNode headNode = new DefaultMu ...
- JTree使用
package JTree; import java.awt.Component; import javax.swing.Icon; import javax.swing.JTree; import ...
- Java中JTree的简单案例
package ch12; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; /** * Created by ...
- Swing组件Jtree,JTablePane选项卡运用
今天开始写技术博客,说实话,本没有什么技术,说是总结也好,说是分享也罢,总之是想自己有意识的做一些事情,作为一名即将毕业的大学生,总是想以最好的状态,去面向社会,今天就是我准备好了的时候,本人将技术博 ...
- JTree用法及JTree使用经验总结
import java.awt.Dimension; import java.awt.Color; import javax.swing.JFrame; import javax.swing. ...
- Jtree(节点的渲染+资源管理器)(2)
上一次我们建立一个比较简单的资源管理器,这次我们说一下上面的资源管理器的问题,并且得尽量的贴近windows的资源管理器. 这样一个简单的资源管理树就完成了,下面我们说说它的问题: ① 图片和外观和W ...
- Jtree (节点的渲染+资源管理器)
我们的还是自定义的Jtree的类: package jtree.customNode; import java.io.File; import javax.swing.JTree; import ja ...
- jtree(选择框)
jtree一般的用法是: 1. 展示电脑中文件的层次结构,如图所示. 具体的代码: package jtree; import java.io.File; import javax.swing.JTr ...
- JAVA GUI学习 - JTree树结构组件学习 ***
public class JTreeKnow extends JFrame { public JTreeKnow() { this.setBounds(300, 100, 400, 500); thi ...
随机推荐
- 关于IE打印预览内容显示不全的问题解决
眼下在调整一个页面打印功能的时候,发现多行文本框TextArea在页面显示的时候,多行文本能够正常显示,可是在打印页面的时候.部分内容就被遮挡住了, 苦思冥想不得其解,后来还是请教了美工. 首先查了下 ...
- 《Node.js In Action》笔记之流程控制
转向Javascript后,开始学习了node.js,选择的第一本书是<Node.js in Action> 将近一个月时间,断断续续看完,选几个点做下笔记 1.实现串行化流程控制 var ...
- WebApi异常
WebApi异常处理解决方案 前言:上篇C#进阶系列——WebApi接口传参不再困惑:传参详解介绍了WebApi参数的传递,这篇来看看WebApi里面异常的处理.关于异常处理,作为程序员的我们肯定 ...
- java文件创建、删除、读取、写入操作大全
一.获得控制台用户输入的信息 public String getInputMessage() throws IOException...{ System.out.println("请输入您的 ...
- C#索引器的应用:自已写一个表格
C#中索引器,在一个类中有很多的同一类型成员的时候,比较适用索引器. 环境:我们假设有一个动物园,里边有很多动物. 用法: 1.先定义一个类,这是成员的类型.在这里就是要定义一个Animal类: pu ...
- pygame系列_游戏窗口显示策略
在这篇blog中,我将给出一个demo演示: 当我们按下键盘的‘f’键的时候,演示的窗口会切换到全屏显示和默认显示两种显示模式 并且在后台我们可以看到相关的信息输出: 上面给出了一个简单的例子,当然在 ...
- .Net程序猿玩转Android开发---(7)相对布局RelativeLayout
相对布局RelativeLayout是Android布局中一个比較经常使用的控件,使用该控件能够布局出适合各种屏幕分辨率的布局,RelativeLayout採用相对位置进行 ...
- oracle nologging用法(转)
一.oracle日志模式分为(logging,force logging,nologging) 默认情况是logging,就是会记录到redo日志中,force logging是强制记录日志,nolo ...
- Percona Data Recovery Tool for InnoDB工具恢复单表的案例
今天上班有个朋友询问我,相关Percona Data Recovery Tool for InnoDB恢复数据中的一些问题,比如说delete,没法恢复数据,原先做过类似的异常处理就,再次模拟了下相关 ...
- Linux下 目录 压缩 解压缩 打包
http://blog.sina.com.cn/s/blog_7479f7990100zwkp.html tar -zcvf /home/xahot.tar.gz /xahot tar -zcv ...