问题
I have two JTree
in two panels in a JFrame
. I want to change the style(color and font) of nodes on drag and drop from one tree to the other.Please provide me a way to change the color of a JTree
node permanently.
回答1:
To start, you will need to have a data object that can handle style and color. You could subclass DefaultMutableTreeNode and add these data items with getts and setters
Then you'd need to create a custom TreeCellRenderer. I recommend extending DefaultTreeCellRenderer, and in the overridden handler, checking for your custom class, and modifying the JLabel output to use the Font and Color if these values are set
回答2:
Create your own CellRenderer
. To give the appropriate behaviour to your MyTreeCellRenderer
, you will have to extend DefaultTreecellRenderer and override the getTreeCellRendererComponent method.
public class MyTreeCellRenderer extends DefaultTreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean exp, boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, sel, exp, leaf, row, hasFocus);
// Assuming you have a tree of Strings
String node = (String) ((DefaultMutableTreeNode) value).getUserObject();
// If the node is a leaf and ends with "xxx"
if (leaf && node.endsWith("xxx")) {
// Paint the node in blue
setForeground(new Color(13, 57 ,115));
}
return this;
}
}
Finally, say your tree is called myTree
, set your CellRenderer
to it:
myTree.setCellRenderer(new MyTreeCellRenderer());
来源:https://stackoverflow.com/questions/10111849/how-to-change-style-color-font-of-a-single-jtree-node