设置JTree树形结构文字的颜色以及文字背景颜色的方法_-Chaz-_新浪博客

可恶的**人寿,要求总是变来变去,哎,没办法!客户需求第一嘛......(心虚啊设置JTree树形结构文字的颜色以及文字背景颜色的方法)
今天又提出变更软件的总体颜色.哎,麻烦死了... 做到最后,发现有个问题就是要改变JTree的文字默认颜色以及文字背景色,查了一下相关资料,终于找到了解决办法:
(该例子在eclipse3.3上调试通过)
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;

public class SimpleTree extends JFrame {
JPanel contentPane;

JScrollPane scrollPane = new JScrollPane();

MyTree tree = new MyTree();

DefaultTreeModel treeModel = (DefaultTreeModel) tree.getModel();

NodeRenderer renderer = new NodeRenderer();

private TreeMouseHandler treeMouseListener = new TreeMouseHandler();

// Constructor
public SimpleTree() {
   enableEvents(AWTEvent.WINDOW_EVENT_MASK);
   try {
    jbInit();
   } catch (Exception e) {
    e.printStackTrace();
   }
}

// Component initialization
private void jbInit() throws Exception {
   tree.setEditable(false);
   tree.setShowsRootHandles(true);
   tree.getSelectionModel().setSelectionMode(
     TreeSelectionModel.SINGLE_TREE_SELECTION);
   tree.setExpandsSelectedPaths(true);
   tree.addMouseListener(treeMouseListener);
   tree.setCellRenderer(renderer);
   tree.addTreeExpansionListener(new TreeExpansionListener() {
    public void treeCollapsed(TreeExpansionEvent evt) {
    }

    public void treeExpanded(TreeExpansionEvent evt) {
    }
   });

   contentPane = (JPanel) this.getContentPane();
   this.setTitle("MyFrame");
   scrollPane.getViewport().add(tree, null);
   contentPane.add(scrollPane, BorderLayout.CENTER);
}

// Overridden so we can exit when window is closed
protected void processWindowEvent(WindowEvent e) {
   super.processWindowEvent(e);
   if (e.getID() == WindowEvent.WINDOW_CLOSING) {
    System.exit(0);
   }
}

public static void main(String[] args) {
   SimpleTree simpleTree = new SimpleTree();
   simpleTree.setSize(800, 600);
   simpleTree.show();
}

private class TreeMouseHandler extends MouseAdapter {
   public void mousePressed(MouseEvent e) {
    if (SwingUtilities.isLeftMouseButton(e) == false) {
     return;
    }
    System.out.println("mousePressed");
   }

   public void mouseClicked(MouseEvent e) {
    if ((SwingUtilities.isLeftMouseButton(e) == false)) {
     return;
    }
    TreePath[] selectedPaths = tree.getSelectionPaths();
    if ((selectedPaths == null) || (selectedPaths.length == 0)) {
     return;
    }
    if (selectedPaths.length == 1) {
     if (e.getClickCount() == 1) {
      System.out
        .println("mouseClicked:   left   button   *   1   :   "
          + selectedPaths[0]);
     } else if (e.getClickCount() == 2) {
      System.out
        .println("mouseClicked:   left   button   *   2   :   "
          + selectedPaths[0]);
     }
    }
   }
}

class MyTree extends JTree {
   public MyTree() {
    DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("root");
    DefaultMutableTreeNode sub1Node = new DefaultMutableTreeNode("sub1");
    rootNode.add(sub1Node);

    DefaultMutableTreeNode n = new DefaultMutableTreeNode("011");
    sub1Node.add(n);
    n.add(new DefaultMutableTreeNode("111"));
    n.add(new DefaultMutableTreeNode("112"));
    n.add(new DefaultMutableTreeNode("113"));

    n = new DefaultMutableTreeNode("012");
    sub1Node.add(n);
    n.add(new DefaultMutableTreeNode("121"));
    n.add(new DefaultMutableTreeNode("122"));
    n.add(new DefaultMutableTreeNode("123"));

    this.setModel(new DefaultTreeModel(rootNode));
   }
}

class NodeRenderer extends DefaultTreeCellRenderer {
   public Component getTreeCellRendererComponent(JTree tree, Object value,
     boolean selected, boolean expanded, boolean leaf, int row,
     boolean hasFocus) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
    super.getTreeCellRendererComponent(tree, value, selected, expanded,
      leaf, row, hasFocus);
    if (node.getUserObject().toString().trim().equals("011")) {

     setForeground(Color.RED);  
     setTextSelectionColor(Color.BLUE);
     setBackgroundSelectionColor(Color.GREEN);
     setBackgroundNonSelectionColor(Color.WHITE);


    }
    return this;
   }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值