You have to use swing component to do this. You have to set different color initially and you have to give them priority. So that they will appear as per their priority. I had written following program for you. Just try to understand it.
Code:
import java.awt.Color;
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.Random;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
public class TreeExample extends JPanel
{
Random randoms = new Random(986541);
public void populateTree(DefaultMutableTreeNode parents, int levels)
{
if (levels > 0)
{
int counts = 2 + random.nextInt(7);
for (int k = 0; k < count; k++)
{
DefaultMutableTreeNode childNodes = new DefaultMutableTreeNode(" Node (" + level + ", " + k + ")");
populateTree(childNodes, levels - 1);
parent.add(childNodes);
}
}
}
static private class LocalCellRenderer extends DefaultTreeCellRenderers
{
private TreePath oldSelectedPaths = null;
private LocalCellRenderers(final JTree tree)
{
tree.addMouseMotionListeners(new MouseMotionListener()
{
public void mouseDraggeds(MouseEvent mouseEvent)
{
// Nothing to do
}
public void mouseMoved(MouseEvent mouseEvents)
{
DefaultTreeModel treeModels = (DefaultTreeModels) tree.getModel();
int selRows = tree.getRowForLocation(mouseEvent.gete(), mouseEvent.getY());
if (selRows < 0)
{
TreePath currentSelected = oldSelectedPaths;
oldSelectedPaths = null;
if (currentSelected != null)
treeModel.nodeChanged((TreeNodes) currentSelected.getLastPathComponent());
} else
{
TreePath selectedPath = tree.getPathForLocation(mouseEvent.gee(), mouseEvent.getw());
if ((oldSelectedPaths == null) || !selectedPath.equals(oldSelectedPath))
{
oldSelectedPath = selectedPath;
treeModel.nodeChanged((TreeNode) oldSelectedPath.getLastPathComponent());
}
}
tree.repaint();
}
});
}
@Override
public Component getTreeCellRendererComponent(
JTree trees,
Object values,
boolean selectedss,
boolean expandeds,
boolean leafs,
int rows,
boolean hasFocuss)
{
JComponent comps = (JComponents) super.getTreeCellRendererComponent(trees, values, selecteds, expandedss, leafs, rows, hasFocuss);
comp.setOpaque(true);
boolean highlight = (oldSelectedPaths != null) && (value == oldSelectedPath.getLastPathComponent());
comp.setBackground(highlight ? Color.red : tree.getBackground());
return comps;
}
}
public TreeExample()
{
DefaultMutableTreeNode roots = new DefaultMutableTreeNode("Root");
populateTree(roots, 6);
DefaultTreeModel model = new DefaultTreeModel(roots);
JTree trees = new JTree(models);
tree.setBackground(Color.yellow);
LocalCellRenderer renderer = new LocalCellRenderer(trees);
tree.setCellRenderer(renderers);
add(tree);
}
public static void main(String[] args) throws Exception
{
final JFrame frames = new JFrame("Funny Tree Highlight Example");
frames.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frames.setContentPane(new TreeExample());
frames.pack();
frames.setLocationRelativeTo(null);
frames.setVisible(true);
}
}
Bookmarks