renderer.setLeafIcon(new ImageIcon("a.jpg"));
renderer.setClosedIcon(new ImageIcon("b.jpg"));
renderer.setOpenIcon(new ImageIcon("c.jpg"));
这样设置图标都变来变去的 我想增加一个节点 图标固定的 怎么弄呢
renderer.setClosedIcon(new ImageIcon("b.jpg"));
renderer.setOpenIcon(new ImageIcon("c.jpg"));
这样设置图标都变来变去的 我想增加一个节点 图标固定的 怎么弄呢
实现 TreeCellRenderer 接口,重写getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) 方法,在这个方法中,把Object value 转换成你自己封装的对象,从中就可以获得 这个接点要使用的图标,setIcon(icon);如果实现还有问题,晚上发完整代码!
你把代码复制下来你还要做的事 【1】默认的包名是 demo,你可以更改,【2】 在d盘的根目录下放入几个图标,默认的图标的名字是test1~test8 格式是png,你也可以改为其他格式,【3】运行,里面包含main(),可以直接运行,
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package demo;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;/**
*
* @author Administrator
*/
public class TestJTreeIcon extends JFrame { private javax.swing.JTree jTree1;
private DefaultMutableTreeNode root;
private DefaultMutableTreeNode test1Node;
private DefaultMutableTreeNode test2Node;
private DefaultMutableTreeNode test3Node;
private DefaultMutableTreeNode test4Node;
private DefaultMutableTreeNode test5Node;
private DefaultMutableTreeNode test6Node;
private DefaultMutableTreeNode test7Node; public TestJTreeIcon() {
jTree1 = new JTree();
JTreeBean root_bean = new JTreeBean("test8", new ImageIcon("d:/test8.png"), Color.BLACK);
JTreeBean test1 = new JTreeBean("test1", new ImageIcon("d:/test1.png"), Color.BLACK);
JTreeBean test2 = new JTreeBean("test2", new ImageIcon("d:/test2.png"), Color.BLACK);
JTreeBean test3 = new JTreeBean("test3", new ImageIcon("d:/test3.png"), Color.BLACK);
JTreeBean test4 = new JTreeBean("test4", new ImageIcon("d:/test4.png"), Color.BLACK);
JTreeBean test5 = new JTreeBean("test5", new ImageIcon("d:/test5.png"), Color.BLACK);
JTreeBean test6 = new JTreeBean("test6", new ImageIcon("d:/test6.png"), Color.BLACK);
JTreeBean test7 = new JTreeBean("test7", new ImageIcon("d:/test7.png"), Color.BLACK);
root = new DefaultMutableTreeNode(root_bean);
test1Node = new DefaultMutableTreeNode(test1);
test2Node = new DefaultMutableTreeNode(test2);
test3Node = new DefaultMutableTreeNode(test3);
test4Node = new DefaultMutableTreeNode(test4);
test5Node = new DefaultMutableTreeNode(test5);
test6Node = new DefaultMutableTreeNode(test6);
test7Node = new DefaultMutableTreeNode(test7);
root.add(test1Node);
test1Node.add(test2Node);
test2Node.add(test3Node);
test3Node.add(test4Node);
test4Node.add(test5Node);
test5Node.add(test6Node);
root.add(test7Node);
DefaultTreeModel model = new DefaultTreeModel(root,true);
jTree1.setModel(model);
jTree1.setCellRenderer(new JTreeCellRenderer());
this.setSize(500, 500);
this.setLayout(new BorderLayout());
this.add(jTree1,BorderLayout.CENTER);
}
public static void main(String args[]){
new TestJTreeIcon().setVisible(true);
}
}class JTreeBean { private String strNode;
private ImageIcon iconNode;
private Color strColor;
private JComponent jcp = null; public JTreeBean(String str, ImageIcon icon, Color color) {
strNode = str;
iconNode = icon;
strColor = color;
} public JTreeBean(String str, ImageIcon icon) {
strNode = str;
iconNode = icon;
} public JTreeBean(String str) {
strNode = str;
} public String getString() {
return strNode;
} public void setString(String strNode) {
this.strNode = strNode;
} public void setJComponent(JComponent jcp) {
this.jcp = jcp;
} public ImageIcon getIcon() {
return iconNode;
} public void setIcon(ImageIcon iconNode) {
this.iconNode = iconNode;
} public Color getColor() {
return strColor;
} public void setColor(Color strColor) {
this.strColor = strColor;
}
}class JTreeCellRenderer extends DefaultTreeCellRenderer { public JTreeCellRenderer() {
} @Override
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;
if (node.getUserObject() instanceof JTreeBean) {
} else {
System.out.println(node.getUserObject());
}
JTreeBean jtb = (JTreeBean) node.getUserObject();
setIcon(jtb.getIcon());
setText(jtb.getString());
setTextNonSelectionColor(jtb.getColor());
// setForeground(Color.RED);
// setTextSelectionColor(Color.BLUE);
// setBackgroundSelectionColor(Color.GREEN);
// setBackgroundNonSelectionColor(Color.BLUE);
return this;
} protected boolean isTutorialBook(Object value) {
DefaultMutableTreeNode node =
(DefaultMutableTreeNode) value; return false;
}
}
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;
import javax.swing.*;
import java.util.*;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.plaf.ColorUIResource;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;public class MainForm extends JFrame implements ActionListener { JScrollPane scrollpane, scrollpane2;
JTextField tf, tf1;
JLabel l;
JButton btnadd, btnEdit, btnDel, btnw, btnr, empty;
MenuItem open, save, exit, about;
MenuBar mb;
CheckboxMenuItem file, folder;
DefaultMutableTreeNode root;
JTree jTree;
DefaultMutableTreeNode currTreeNode = null;
JTextArea ta;
Box box, box2, box3, box6;
JPanel panel;
JProgressBar pb;
JRadioButton rb1,rb2;
Date currentTime;SimpleDateFormat formatter;
String str;
JTable table,table1;
Vector dataVector,headVector,rowVector;
private DefaultMutableTreeNode test1Node;
private DefaultMutableTreeNode test2Node;
public MainForm() { super("文件模拟管理系统");
Container cn = getContentPane();
cn.setLayout(new BorderLayout(3, 3));
Font font = new Font("TimesRoman", Font.BOLD, 16);
//时间设置
currentTime = new Date();
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
str = formatter.format(currentTime);
//设置菜单
mb = new MenuBar();
Menu m1 = new Menu("文件");
Menu m2 = new Menu("编辑");
Menu m3 = new Menu("帮助");
Menu new0 = new Menu("新建");
mb.add(m1);
mb.add(m2);
mb.add(m3);
file = new CheckboxMenuItem("文件");
folder = new CheckboxMenuItem("文件夹");
open = new MenuItem("打开");
save = new MenuItem("保存");
exit = new MenuItem("退出");
exit.addActionListener(this);
about = new MenuItem("关于");
m1.add(new0);
new0.add(file);
new0.add(folder);
m1.add(open);
m1.add(save);
m1.add(exit);
m3.add(about);
setMenuBar(mb); jTree = new JTree() ;
JTreeBean root_bean = new JTreeBean("test8", new ImageIcon("d:/test8.png"),Color.BLACK);
root = new DefaultMutableTreeNode(root_bean);
DefaultTreeModel mode = new DefaultTreeModel(root,true);
jTree.setModel(mode);
jTree.setCellRenderer(new JTreeCellRenderer());
scrollpane = new JScrollPane(jTree);
l = new JLabel(" 路径 ");
tf = new JTextField();
Box box1 = Box.createHorizontalBox();
box1.add(l);
box1.add(tf);
//在表格上显式文件或文件夹详细信息
JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel();
JLabel l1 = new JLabel("文件名:");
tf1 = new JTextField(10);
ButtonGroup bg = new ButtonGroup();
rb1 = new JRadioButton("文件", true);
rb2 = new JRadioButton("文件夹");
bg.add(rb2);
bg.add(rb1);
JLabel l2 = new JLabel("文件类型: ");
JLabel l3 = new JLabel("访问权限: ");
JCheckBox cb1 = new JCheckBox("可读", true);
JCheckBox cb2 = new JCheckBox("可写", true);
cb1.setEnabled(false);
JLabel l4 = new JLabel("日期: ");
JTextField tf2 = new JTextField(12);
tf2.setText(str);
tf2.setForeground(Color.RED);
tf2.setEnabled(false);
btnadd = new JButton("新建");
btnEdit = new JButton("重命名");
btnDel = new JButton("删除");
btnw = new JButton("写文件");
btnr = new JButton("打开");
btnr.addActionListener(this);
btnadd.setBackground(Color.GRAY);
btnEdit.setBackground(Color.GRAY);
btnDel.setBackground(Color.GRAY);
btnw.setBackground(Color.GRAY);
btnr.setBackground(Color.GRAY); btnadd.addActionListener(new AddItem());
btnDel.addActionListener(new DelItem());
btnEdit.addActionListener(new EditItem());
panel1.add(l1);
panel1.add(tf1);
panel1.add(l2);
panel1.add(rb1);
panel1.add(rb2);
panel2.add(l3);
panel2.add(cb1);
panel2.add(cb2);
panel2.add(l4);
panel2.add(tf2);
panel3.add(btnadd);
panel3.add(btnEdit);
panel3.add(btnDel);
panel3.add(btnw);
panel3.add(btnr);
Box box0 = Box.createVerticalBox();
Box box4 = Box.createHorizontalBox();
Box box5 = Box.createVerticalBox();
String[] headers = { "文件名", "大小", "类型","时间" };
Object[][] cellData = null;
DefaultTableModel model = new DefaultTableModel(cellData, headers) {
public boolean isCellEditable(int row, int column) {
return false;
}
}; table = new JTable(model);
table.setPreferredScrollableViewportSize(new Dimension(100, 80));
JScrollPane scrollpane1 = new JScrollPane(table);
box4.add(scrollpane1);
box5.add(panel1);
box5.add(panel2);
box5.add(panel3);
box4.setBorder(BorderFactory.createLineBorder(Color.PINK));
box0.add(box4);
box0.add(box5); box = Box.createVerticalBox();
box2 = Box.createHorizontalBox();
box3 = Box.createHorizontalBox();
box6 = Box.createHorizontalBox();
String[] head = { "文件名", "大小", "类型","时间" };
Object[][] cell = null;
DefaultTableModel model1 = new DefaultTableModel(cell, head) {
public boolean isCellEditable(int row, int column) {
return false;
}
};
table1 = new JTable(model1);
table1.setPreferredScrollableViewportSize(new Dimension(100, 80));
scrollpane2 = new JScrollPane(table1);
box2.add(scrollpane2);
panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
JPanel pan = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 10));
JLabel label1 = new JLabel("已使用0k");
pb = new JProgressBar();
UIManager.put("ToolTip.foreground", new ColorUIResource(Color.BLACK));
UIManager.put("ToolTip.background", new ColorUIResource(Color.RED));
pb.setToolTipText("存储空间使用情况");
empty = new JButton("清空回收站");
empty.setBackground(Color.white);
empty.setForeground(Color.darkGray);
empty.setBorder(BorderFactory.createLineBorder(Color.PINK));
panel.add(empty);
box3.add(panel);
pan.add(pb);
pan.add(label1);
box6.add(pan);
pb.setPreferredSize(new Dimension(200, 50));
box.add(box2);
box.add(box3);
box.add(box6);
tf.setFont(font);
tf2.setFont(font);
l.setFont(font);
btnadd.setFont(font);
btnDel.setFont(font);
btnw.setFont(font);
btnr.setFont(font);
empty.setFont(font);
l1.setFont(font);
l2.setFont(font);
l3.setFont(font);
l4.setFont(font);
rb1.setFont(font);
rb2.setFont(font);
cb1.setFont(font);
cb2.setFont(font); add(box1, BorderLayout.NORTH);
add(scrollpane, BorderLayout.WEST);
add(box0, BorderLayout.CENTER);
add(box, BorderLayout.EAST);
//设置窗体显式位置和大小
setSize(950, 650);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
setLocation(screenSize.width / 2 - frameSize.width / 2, screenSize.height / 2 - frameSize.height / 2);
setResizable(false);
cn.setBackground(Color.ORANGE);
setUndecorated(true);
this.getRootPane().setWindowDecorationStyle(JRootPane.WARNING_DIALOG);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
class ProgressBar implements Runnable { public void run() {
for (int i = 0; i <= 200; i++) {
pb.setValue(i);
pb.setBackground(Color.BLACK);
pb.setForeground(Color.RED);
pb.setStringPainted(true);
try {
Thread.sleep(50);
} catch (Exception ee) {
ee.printStackTrace();
}
if (pb.getPercentComplete() == 1.0) { }
}
}
} //增加新节点事件监听
class AddItem implements ActionListener { public void actionPerformed(ActionEvent e) {
//执行增加节点的动作
JTreeBean root_bean = new JTreeBean(tf1.getText(), new ImageIcon("d:/test8.png"),Color.BLACK);
root = new DefaultMutableTreeNode(root_bean);
DefaultMutableTreeNode newNode = new DefaultMutableTreeNode(root_bean) ; if(rb1.isSelected())
{
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
tableModel.addRow(new Object[]{tf1.getText(), "35", "Boss",str}); }
else if(rb2.isSelected()){
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
tableModel.addRow(new Object[]{tf1.getText(), "------", "------",str}); }
jTree.setCellRenderer(new JTreeCellRenderer());
currTreeNode.add(newNode);
DefaultTreeModel mode = new DefaultTreeModel(root,true);
jTree.setModel(mode);
mode.nodeStructureChanged(currTreeNode);
Thread t = new Thread(new ProgressBar());
//t.start();
}
}
//重命名事件监听
class EditItem implements ActionListener { public void actionPerformed(ActionEvent e) {
//执行重命名的动作
new NewClass1();
currTreeNode.setUserObject("");
DefaultTreeModel model = (DefaultTreeModel) jTree.getModel();
model.nodeChanged(currTreeNode);
}
}
//删除节点事件监听
class DelItem implements ActionListener { public void actionPerformed(ActionEvent e) {
//执行删除节点的动作
DefaultTreeModel model = (DefaultTreeModel) jTree.getModel();
model.removeNodeFromParent(currTreeNode);
}
} class SelItem implements TreeSelectionListener {
public void valueChanged(TreeSelectionEvent e) {
currTreeNode = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
TreeNode tr[] = currTreeNode.getPath();
if (currTreeNode.getLevel()==0)return;
String fileName = tr.length>2 ? tr[1].toString()+tr[2].toString() : tr[1].toString();
for (int i=2;i<tr.length;i++){
fileName +="\\"+tr[i].toString();
}
tf.setText(fileName); }
}
public static void main(String[] args) {
new MainForm();
} public void actionPerformed(ActionEvent e) {
if (e.getSource() == exit) {
System.exit(0);
}
if (e.getSource() == btnr) {
}
}
}
class JTreeBean { private String strNode;
private ImageIcon iconNode;
private Color strColor;
private JComponent jcp = null; public JTreeBean(String str, ImageIcon icon, Color color) {
strNode = str;
iconNode = icon;
strColor = color;
} public JTreeBean(String str, ImageIcon icon) {
strNode = str;
iconNode = icon;
} public JTreeBean(String str) {
strNode = str;
} public String getString() {
return strNode;
} public void setString(String strNode) {
this.strNode = strNode;
} public void setJComponent(JComponent jcp) {
this.jcp = jcp;
} public ImageIcon getIcon() {
return iconNode;
} public void setIcon(ImageIcon iconNode) {
this.iconNode = iconNode;
} public Color getColor() {
return strColor;
} public void setColor(Color strColor) {
this.strColor = strColor;
}
} class JTreeCellRenderer extends DefaultTreeCellRenderer { public JTreeCellRenderer() {
}
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;
if (node.getUserObject() instanceof JTreeBean) {
} else {
System.out.println(node.getUserObject());
}
JTreeBean jtb = (JTreeBean) node.getUserObject();
setIcon(jtb.getIcon());
setText(jtb.getString());
setTextNonSelectionColor(jtb.getColor());
return this;
}
}
...... public ImageIcon getImageIcon(){
return icon;
}
}class MyTreeRenderer implements TreeCellRenderer{
public Component getTreeCellRendererComponent(......){
......
if(value instanceof MyTreeNode){
((MyTreeNode)value).setIcon(((MyTreeNode)value).getImageIcon());
}
......
}
}......
tree.addNode(new MyTreeNode(ImageIcon icon));//关键是对象封装,再通过CellRenderer实现
tree.setCellRenderer(new MyTreeRenderer());