JTree orgTree;
DefaultMutableTreeNode root,child;
DefaultTreeModel model;
root=new DefaultMutableTreeNode("root");
orgTree=new JTree(root);
model=(DefaultTreeModel)orgTree.getModel();
child=new DefaultMutableTreeNode("字节点");
model.insertNodeInto(child,root,0);
问怎么改变“字节点”的颜色?
DefaultMutableTreeNode root,child;
DefaultTreeModel model;
root=new DefaultMutableTreeNode("root");
orgTree=new JTree(root);
model=(DefaultTreeModel)orgTree.getModel();
child=new DefaultMutableTreeNode("字节点");
model.insertNodeInto(child,root,0);
问怎么改变“字节点”的颜色?
setTextNonSelectionColor(Color)
setTextSelectionColor(Color)
setBackgroundNonSelectionColor(Color)
setBackgroundSelectionColor(Color)
下面是一个例子,我的程序用到的,希望对你有帮助。
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);
}
/**
* Sets the value of the current tree cell to <code>value</code>.
*
* @return the <code>Component</code> that the renderer uses to draw the value
* @param tree JTree
* @param value Object
* @param selected boolean
* @param expanded boolean
* @param leaf boolean
* @param row int
* @param hasFocus boolean
* @todo Implement this javax.swing.tree.TreeCellRenderer method
*/
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
{
int count = node.getChildCount();
NodeData childData = null;
for(int i = 0 ; i < count ; i++)
{
DefaultMutableTreeNode child =
(DefaultMutableTreeNode) node.getChildAt(i);
childData = (NodeData) child.getUserObject();
if(childData.isOverflow())
break;
}
nd = childData;
}
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(nd.toString());
return this;
}}
的setCellRenderer()方法就行了
不过, 楼主,字体是没有颜色 这一概念的,所谓字体的颜色,实际是背景,或前景颜色.
setForeground(Color);节点属性的判断可以通过对Object value进行判断: class NodeRenderer extends DefaultTreeCellRenderer
{
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus)
{
super.getTreeCellRendererComponent(tree, value,
selected, expanded,
leaf, row, hasFocus);
MyTreeNode node = (MyTreeNode)value;
if(...) //条件满足
{
setForeground(Color.RED);
}
return this;
}
}然后设置树的Renderer:
jTree.setCellRenderer(new NodeRenderer());
if(...) //条件满足
{
setForeground(Color.RED);
}
return this;
}
您的这部分代码,我还是不太明白.如果我要将我选中的树节点的颜色变成red,我的这部分代码该怎么写呢.下面是选择树节点后的触发事件,这两部分代码该怎么结合呢.请您进一步指导一下.
public void valueChanged(TreeSelectionEvent e) {
JTree tree = (JTree) e.getSource();
DefaultMutableTreeNode selectionNode =
(DefaultMutableTreeNode) tree.getLastSelectedPathComponent();
String nodeName = selectionNode.toString();
//tree的click事件
if (nodeName.equals("011")) {
}
}
比如你最后贴的这段代码里面,你需要nodeName.equals("011")的树节点是红色,那么你需要在树的触发器里面写: class NodeRenderer extends DefaultTreeCellRenderer
{
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus)
{
super.getTreeCellRendererComponent(tree, value,
selected, expanded,
leaf, row, hasFocus);
DefaultMutableTreeNode node = (DefaultMutableTreeNode)value;
if(node.getUserObject().toString().trim().equals("011")) //条件满足
{
setForeground(Color.RED);
}
return this;
}
}
然后在你的生成树之后给树加上渲染器,比如下面这个例子: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);
}
return this;
}
}}