Java JTree的用法
来源:互联网 发布:医学三维重建软件 编辑:程序博客网 时间:2024/06/10 01:19
这是好几天前找的代码了,一直没有看,今天翻出来,觉得写得很不错,就自己摘抄在这里了。
原谅我已经不知道原文出处了,抱歉!各位有知道的,望转告,谢谢~
package lj.hp.test4;import javax.swing.*;import java.awt.Color;import java.awt.Component;import java.awt.Container;import java.awt.event.*;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreeCellRenderer;import java.util.Random;import java.awt.event.MouseAdapter;import java.util.Vector;import java.util.Hashtable;import java.util.Enumeration;import javax.swing.tree.TreePath;import java.sql.ResultSet;public class GB extends JFrame{ private TreeMenu tree; public GB() { tree = new TreeMenu(); this.setSize(500,550); this.Init(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.show(); } private void Init() { Container cp = this.getContentPane(); cp.setLayout(null); JScrollPane jsp = new JScrollPane(tree); jsp.setBounds(100,20,300,500); cp.add(jsp); } public static void main(String[] args) { GB gb = new GB(); }}class TreeMenu extends JTree{ private DefaultMutableTreeNode root; private DefaultTreeModel model; public TreeMenu() { super(); this.setRootVisible(true); NodeData rootData = new NodeData("Root"); root = new DefaultMutableTreeNode(rootData); model = new DefaultTreeModel(root); model.setRoot(root); this.setModel(model); this.addMouseListener(new LinktoEvent()); this.setCellRenderer(new CellRender()); this.testLoaddata(); } private void testLoaddata() { Hashtable table = new Hashtable(); long seeds = java.util.Calendar.getInstance().getTimeInMillis(); for(int i = 0 ; i < 10 ; i ++) { Random r = new Random(seeds); NodeData nd = new NodeData(String.valueOf(r.nextInt(1000))); seeds += r.nextInt(1000); Vector vec = new Vector(); for(int j = 0 ; j < 3 ; j++) { double min = r.nextDouble(); seeds += min; double max = r.nextDouble(); seeds += max; double value = r.nextDouble(); seeds += value; vec.addElement(new NodeData(min,max,value,"www.csdn.NET")); } table.put(nd,vec); } this.LoadData(table); } public void LoadData(Hashtable nodes) { Vector child; Vector parent = new Vector(); java.util.Enumeration enum2 = nodes.keys(); while(enum2.hasMoreElements()) { parent.addElement(enum2.nextElement()); } for(int i = parent.size() - 1 ; i > 0 ; i--) { child = (Vector) nodes.get(parent.elementAt(i)); DefaultMutableTreeNode temp = this.addParentNode( (NodeData)parent.elementAt(i)); DefaultMutableTreeNode parentNode = this.addParentNode(temp,new NodeData("Three")); for(int j = 0 ; j < child.size() ; j++) { this.addChildNode(parentNode,(NodeData) child.elementAt(j)); } } } public DefaultMutableTreeNode addParentNode(NodeData nodeData) { DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(nodeData); ((DefaultMutableTreeNode) model.getRoot()).add(newNode); return newNode; } public DefaultMutableTreeNode addParentNode(DefaultMutableTreeNode parentNode, NodeData nodeData) { DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(nodeData); parentNode.add(newNode); return newNode; } public void addChildNode(DefaultMutableTreeNode node,NodeData nodeData) { DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(nodeData); node.add(childNode); } public void reBuild() { root.removeAllChildren(); this.testLoaddata(); } class LinktoEvent extends MouseAdapter { public void mouseClicked(MouseEvent me) { DefaultMutableTreeNode node; TreePath selectedPath = TreeMenu.this.getPathForLocation(me.getX(),me.getY()); if(selectedPath !=null ) { node = (DefaultMutableTreeNode) selectedPath.getLastPathComponent(); if (node != null && node.isLeaf()) { NodeData nd = (NodeData) node.getUserObject(); //The leaf that has url will be display a dialog. if(nd.isLeaf()) { JOptionPane.showConfirmDialog(TreeMenu.this, nd.getUrl()); //You can implment your function. } } } } }} class NodeData{ private String name; private double min; private double max; private double value; private boolean isLeaf = false; private String url = null; public NodeData(String name) { this.name = name ; this.isLeaf = false; } public NodeData(double min,double max,double value,String url) { this.min = min ; this.max = max ; this.value = value; this.isLeaf = true; this.url = url; } public boolean isLeaf() { return this.isLeaf ; } public boolean isOverflow() { if(this.isLeaf == true) { if(value <= max && value >= min) { return true ; } else { return false; } } else { return false; } } public String toString() { if(this.isLeaf()) { return String.valueOf(value); } else { return this.name; } } public void setUrl(String newUrl) { this.url = newUrl; } public String getUrl() { return this.url; }} class CellRender extends JLabel implements TreeCellRenderer { protected Color selectedBackground; protected Color selectedForeground; protected Color noselectedBackground; protected Color noselectedForeground; protected Color overflowBackground = Color.yellow; protected Color overflowForeground = Color.red; protected Color overflowSelectedBG = Color.green; protected Color overflowSelectedFG = Color.black; public CellRender() { super(); this.selectedBackground = Color.blue; this.selectedForeground = Color.green; this.noselectedBackground = Color.white; this.noselectedForeground = Color.blue; this.setForeground(this.noselectedForeground); this.setBackground(this.noselectedBackground); } public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; NodeData nd ; if(leaf) { nd = (NodeData) node.getUserObject(); } else { nd = checkChild(node); } if (!nd.isOverflow()) { if (selected) { this.setForeground(this.selectedForeground); this.setBackground(this.selectedBackground); } else { this.setBackground(this.noselectedBackground); this.setForeground(this.noselectedForeground); } } else { if(selected) { this.setBackground(this.overflowSelectedBG); this.setForeground(this.overflowSelectedFG); } else { this.setBackground(this.overflowBackground); this.setForeground(this.overflowForeground); } } this.setText(value.toString()); return this; } private NodeData checkChild(DefaultMutableTreeNode childNode) { NodeData child = null; int count = childNode.getChildCount(); for(int i = 0 ; i < count ; i++) { DefaultMutableTreeNode childNodes = (DefaultMutableTreeNode) childNode.getChildAt(i); if(childNodes.isLeaf()) { child = (NodeData) childNodes.getUserObject(); if(child.isOverflow()) { break; } } else { child = checkChild(childNodes); } } return child; } }
运行结果如下图所示:
再次感谢原文作者~
2017.04.22
大周六的还在实验室学习~今天北京蓝天,微风,天气晴朗~适宜出门~
0 0
- Java JTree的用法
- JTree控件的用法
- JTree的用法
- JTree的一些用法
- JTree的用法
- JTree的基本用法
- JTree的用法实践
- JAVA JTree的使用
- JTree用法
- JAVA中JTree的使用
- java中jTree组件的常用操作
- swing中JTree的使用和JTree在netbeans中的用法
- swing中JTree的使用和JTree在netbeans中的用法
- JTree用法示例
- JTree用法详解
- JTree用法及JTree使用经验总结
- JTree用法及JTree使用经验总结(转)
- JTree用法及JTree使用经验总结(转)
- 滴滴17春招大题
- 自定义数据格式的矢量地图实现
- Combination Sum
- 操作系统之存储管理详解
- 【51单片机】波特率
- Java JTree的用法
- Python和Java中的变量区别
- Git篇
- ThinkPHP3.2.3中的Datetimepicker插件使用
- matplotlib基本画图示例
- nl命令(类似于cat 输出文件内容)
- 三角函数与万花尺(初稿)
- more effective C++
- 救基友记2