你可以使用JComponent所提供的putClientProperty(Object key,Object value)方法来设置java默认的JTree外观,设置方式共有 3种:
JTree利用TreeCellRenderer界面来运行绘制节点的工作,同样的,你不需要直接支实作这个界面所定义的方法,因为java本身提 供一个已经实作好的类来给我们使用,此类就是DefaultTreeCellRenderer,你可以在javax.swing.tree package中找到此类所提供 的方法。下面为使用DefaultTreeCellRenderer更改节点图案的一个例子:
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*; import com.incors.plaf.alloy.*; public class TreeDemo4 { public TreeDemo4() { JFrame f = new JFrame("TreeDemo"); Container contentPane = f.getContentPane(); DefaultMutableTreeNode root = new DefaultMutableTreeNode("资源管理器"); DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("我的公文包"); DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("我的电脑"); DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("收藏夹"); DefaultMutableTreeNode node4 = new DefaultMutableTreeNode("Readme"); DefaultTreeModel treeModel = new DefaultTreeModel(root); treeModel.insertNodeInto(node1, root, root.getChildCount()); treeModel.insertNodeInto(node2, root, root.getChildCount()); treeModel.insertNodeInto(node3, root, root.getChildCount()); treeModel.insertNodeInto(node4, root, root.getChildCount()); DefaultMutableTreeNode leafnode = new DefaultMutableTreeNode("公司文件"); treeModel.insertNodeInto(leafnode, node1, node1.getChildCount()); leafnode = new DefaultMutableTreeNode("个人信件"); treeModel.insertNodeInto(leafnode, node1, node1.getChildCount()); leafnode = new DefaultMutableTreeNode("私人文件"); treeModel.insertNodeInto(leafnode, node1, node1.getChildCount()); leafnode = new DefaultMutableTreeNode("本机磁盘(C:)"); treeModel.insertNodeInto(leafnode, node2, node2.getChildCount()); leafnode = new DefaultMutableTreeNode("本机磁盘(D:)"); treeModel.insertNodeInto(leafnode, node2, node2.getChildCount()); leafnode = new DefaultMutableTreeNode("本机磁盘(E:)"); treeModel.insertNodeInto(leafnode, node2, node2.getChildCount()); DefaultMutableTreeNode node31 = new DefaultMutableTreeNode("网站列表"); treeModel.insertNodeInto(node31, node3, node3.getChildCount()); leafnode = new DefaultMutableTreeNode("奇摩站"); treeModel.insertNodeInto(leafnode, node3, node3.getChildCount()); leafnode = new DefaultMutableTreeNode("职棒消息"); treeModel.insertNodeInto(leafnode, node3, node3.getChildCount()); leafnode = new DefaultMutableTreeNode("网络书店"); treeModel.insertNodeInto(leafnode, node3, node3.getChildCount()); try { LookAndFeel alloyLnF = new AlloyLookAndFeel(); UIManager.setLookAndFeel(alloyLnF); } catch (UnsupportedLookAndFeelException ex) { // You may handle the exception here } // this line needs to be implemented in order to make JWS work properly UIManager.getLookAndFeelDefaults().put("ClassLoader", getClass().getClassLoader()); JTree tree = new JTree(treeModel); tree.setRowHeight(20); DefaultTreeCellRenderer cellRenderer = (DefaultTreeCellRenderer) tree .getCellRenderer(); cellRenderer.setLeafIcon(new ImageIcon("..\\icons\\leaf.gif")); cellRenderer.setOpenIcon(new ImageIcon("..\\icons\\open.gif")); cellRenderer.setClosedIcon(new ImageIcon("..\\icons\\close.gif")); cellRenderer.setFont(new Font("宋体", Font.PLAIN, 12));// 设置字体. cellRenderer.setBackgroundNonSelectionColor(Color.white); cellRenderer.setBackgroundSelectionColor(Color.yellow); cellRenderer.setBorderSelectionColor(Color.red); /* * 设置选时或不选时,文字的变化颜色 */ cellRenderer.setTextNonSelectionColor(Color.black); cellRenderer.setTextSelectionColor(Color.blue); JScrollPane scrollPane = new JScrollPane(); scrollPane.setViewportView(tree); contentPane.add(scrollPane); f.pack(); f.setVisible(true); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String args[]) { new TreeDemo4(); } }Window Xp界面:
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*; import com.incors.plaf.alloy.*; public class TreeDemo3 { public TreeDemo3() { // 设置成Alloy界面样式 try { AlloyLookAndFeel.setProperty("alloy.isLookAndFeelFrameDecoration", "true"); LookAndFeel alloyLnF = new AlloyLookAndFeel(); JFrame.setDefaultLookAndFeelDecorated(true); UIManager.setLookAndFeel(alloyLnF); } catch (UnsupportedLookAndFeelException ex) { // You may handle the exception here } // this line needs to be implemented in order to make JWS work properly UIManager.getLookAndFeelDefaults().put("ClassLoader", getClass().getClassLoader()); // JDialog.setDefaultLookAndFeelDecorated(true); JFrame f = new JFrame("firstTree"); Container contentPane = f.getContentPane(); // if (contentPane instanceof JComponent) { // ((JComponent) contentPane).setMinimumSize(new Dimension(100, 100)); // } // Container contentPane = f.getContentPane(); DefaultMutableTreeNode root = new DefaultMutableTreeNode("资源管理器"); DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("我的公文包"); DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("我的电脑"); DefaultMutableTreeNode node3 = new DefaultMutableTreeNode("收藏夹"); DefaultMutableTreeNode node4 = new DefaultMutableTreeNode("Readme"); DefaultTreeModel treeModel = new DefaultTreeModel(root); treeModel.insertNodeInto(node1, root, root.getChildCount()); treeModel.insertNodeInto(node2, root, root.getChildCount()); treeModel.insertNodeInto(node3, root, root.getChildCount()); treeModel.insertNodeInto(node4, root, root.getChildCount()); DefaultMutableTreeNode leafnode = new DefaultMutableTreeNode("公司文件"); treeModel.insertNodeInto(leafnode, node1, node1.getChildCount()); leafnode = new DefaultMutableTreeNode("个人信件"); treeModel.insertNodeInto(leafnode, node1, node1.getChildCount()); leafnode = new DefaultMutableTreeNode("私人文件"); treeModel.insertNodeInto(leafnode, node1, node1.getChildCount()); leafnode = new DefaultMutableTreeNode("本机磁盘(C:)"); treeModel.insertNodeInto(leafnode, node2, node2.getChildCount()); leafnode = new DefaultMutableTreeNode("本机磁盘(D:)"); treeModel.insertNodeInto(leafnode, node2, node2.getChildCount()); leafnode = new DefaultMutableTreeNode("本机磁盘(E:)"); treeModel.insertNodeInto(leafnode, node2, node2.getChildCount()); DefaultMutableTreeNode node31 = new DefaultMutableTreeNode("网站列表"); treeModel.insertNodeInto(node31, node3, node3.getChildCount()); leafnode = new DefaultMutableTreeNode("奇摩站"); treeModel.insertNodeInto(leafnode, node3, node3.getChildCount()); leafnode = new DefaultMutableTreeNode("职棒消息"); treeModel.insertNodeInto(leafnode, node3, node3.getChildCount()); leafnode = new DefaultMutableTreeNode("网络书店"); treeModel.insertNodeInto(leafnode, node3, node3.getChildCount()); JTree tree = new JTree(treeModel); /* 改变JTree的外观* */ // tree.putClientProperty("JTree.lineStyle","Horizontal"); /* 改变JTree的外观* */ JScrollPane scrollPane = new JScrollPane(); scrollPane.setViewportView(tree); contentPane.add(scrollPane); f.pack(); f.setVisible(true); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String args[]) { new TreeDemo3(); } }