?? extendsdefaulttreecellrenderer.java
字號:
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.event.*;
import java.awt.*;
/**
* Description:
* <br/>Copyright (C), 2005-2008, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author Yeeku.H.Lee kongyeeku@163.com
* @version 1.0
*/
public class ExtendsDefaultTreeCellRenderer
{
JFrame jf = new JFrame("根據節點類型定義圖標");
JTree tree;
//定義幾個初始節點
DefaultMutableTreeNode root = new DefaultMutableTreeNode(
new NodeData(DBObjectType.ROOT , "數據庫導航"));
DefaultMutableTreeNode salaryDb = new DefaultMutableTreeNode(
new NodeData(DBObjectType.DATABASE , "公司工資數據庫"));
DefaultMutableTreeNode customerDb = new DefaultMutableTreeNode(
new NodeData(DBObjectType.DATABASE , "公司客戶數據庫"));
//定義salaryDb的兩個子節點
DefaultMutableTreeNode employee = new DefaultMutableTreeNode(
new NodeData(DBObjectType.TABLE , "員工表"));
DefaultMutableTreeNode attend = new DefaultMutableTreeNode(
new NodeData(DBObjectType.TABLE , "考勤表"));
//定義customerDb的一個子節點
DefaultMutableTreeNode contact = new DefaultMutableTreeNode(
new NodeData(DBObjectType.TABLE , "聯系方式表"));
//定義employee的三個子節點
DefaultMutableTreeNode id = new DefaultMutableTreeNode(
new NodeData(DBObjectType.INDEX , "員工ID"));
DefaultMutableTreeNode name = new DefaultMutableTreeNode(
new NodeData(DBObjectType.COLUMN , "姓名"));
DefaultMutableTreeNode gender = new DefaultMutableTreeNode(
new NodeData(DBObjectType.COLUMN , "性別"));
public void init()throws Exception
{
//通過add方法建立樹節點之間的父子關系
root.add(salaryDb);
root.add(customerDb);
salaryDb.add(employee);
salaryDb.add(attend);
customerDb.add(contact);
employee.add(id);
employee.add(name);
employee.add(gender);
//以根節點創建樹
tree = new JTree(root);
//設置該JTree使用自定義的節點繪制器
tree.setCellRenderer(new MyRenderer());
//設置是否顯示根節點的“展開/折疊”圖標,默認是false
tree.setShowsRootHandles(true);
//設置節點是否可見,默認是true
tree.setRootVisible(true);
//設置使用Windows風格外觀
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
//更新JTree的UI外觀
SwingUtilities.updateComponentTreeUI(tree);
jf.add(new JScrollPane(tree));
jf.pack();
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);
}
public static void main(String[] args) throws Exception
{
new ExtendsDefaultTreeCellRenderer().init();
}
}
//定義一個NodeData類,用于封裝節點數據
class NodeData
{
public int nodeType;
public String nodeData;
public NodeData(int nodeType , String nodeData)
{
this.nodeType = nodeType;
this.nodeData = nodeData;
}
public String toString()
{
return nodeData;
}
}
//定義一個接口,該接口里包含數據庫對象類型的常量
interface DBObjectType
{
int ROOT = 0;
int DATABASE = 1;
int TABLE = 2;
int COLUMN = 3;
int INDEX = 4;
}
class MyRenderer extends DefaultTreeCellRenderer
{
//初始化5個圖標
ImageIcon rootIcon = new ImageIcon("icon/root.gif");
ImageIcon databaseIcon = new ImageIcon("icon/database.gif");
ImageIcon tableIcon = new ImageIcon("icon/table.gif");
ImageIcon columnIcon = new ImageIcon("icon/column.gif");
ImageIcon indexIcon = new ImageIcon("icon/index.gif");
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus)
{
//執行父類默認的節點繪制操作
super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
NodeData data = (NodeData)node.getUserObject();
//根據數據節點里的nodeType數據決定節點圖標
ImageIcon icon = null;
switch(data.nodeType)
{
case DBObjectType.ROOT:
icon = rootIcon;
break;
case DBObjectType.DATABASE:
icon = databaseIcon;
break;
case DBObjectType.TABLE:
icon = tableIcon;
break;
case DBObjectType.COLUMN:
icon = columnIcon;
break;
case DBObjectType.INDEX:
icon = indexIcon;
break;
}
//改變圖標
this.setIcon(icon);
return this;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -