NodeRolloverDemo < Projects < TWiki
|
TWiki . Projects . NodeRolloverDemo
|
-- Main.aberrant - 03 Jun 2008
Demonstrates how to highlight a node in a tree when the mouse is over it.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.DefaultTreeModel;
public class NodeRolloverDemo extends JPanel {
private JTree tree = new JTree();
private int mouseOverRow = -1;
/**
* Demonstrates how to highlight a node in a tree when the mouse is over it.
*/
private NodeRolloverDemo() {
setLayout(new BorderLayout());
JScrollPane scrollPane = new JScrollPane(tree);
add(scrollPane, BorderLayout.CENTER);
tree.setModel(createModel());
tree.addMouseMotionListener(mouseOverListener);
tree.setCellRenderer(renderer);
}
/**
* MouseMotionListener that listens for changes in the selected row and calls repaint.
*/
private MouseMotionListener mouseOverListener = new MouseMotionAdapter(){
private int currentRow;
@Override
public void mouseMoved(MouseEvent e) {
currentRow = tree.getClosestRowForLocation(e.getX(), e.getY());
if(currentRow != mouseOverRow){
mouseOverRow = currentRow;
repaint();
}
}
};
/**
* Renderer the row that the mouse is over Yellow
*/
private DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer(){
@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);
if(row == mouseOverRow){
setBackgroundNonSelectionColor(Color.YELLOW);
}else{
setBackgroundNonSelectionColor(UIManager.getColor("Tree.textBackground"));
}
return this;
}
};
/**
* Start the demo on the Event Dispatch Thread.
*
* @param args
* the command line arguments
*/
public static void main(String[] args) {
// turn bold fonts off in metal
UIManager.put("swing.boldMetal", Boolean.FALSE);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame demoFrame = new JFrame();
demoFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
demoFrame.setContentPane(new NodeRolloverDemo());
demoFrame.pack();
demoFrame.setVisible(true);
}
});
}
/**
* Creates the demos tree model which contains java books.
*
* @return the demos tree model
*/
private DefaultTreeModel createModel() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Books");
DefaultMutableTreeNode category = null;
DefaultMutableTreeNode book = null;
category = new DefaultMutableTreeNode("Books for Java Programmers");
root.add(category);
// original Tutorial
book = new DefaultMutableTreeNode(
"The Java Tutorial: A Short Course on the Basics");
category.add(book);
// Tutorial Continued
book = new DefaultMutableTreeNode(
"The Java Tutorial Continued: The Rest of the JDK");
category.add(book);
// JFC Swing Tutorial
book = new DefaultMutableTreeNode(
"The JFC Swing Tutorial: A Guide to Constructing GUIs");
category.add(book);
// Bloch
book = new DefaultMutableTreeNode(
"Effective Java Programming Language Guide");
category.add(book);
// Arnold/Gosling
book = new DefaultMutableTreeNode("The Java Programming Language");
category.add(book);
// Chan
book = new DefaultMutableTreeNode("The Java Developers Almanac");
category.add(book);
category = new DefaultMutableTreeNode("Books for Java Implementers");
root.add(category);
// VM
book = new DefaultMutableTreeNode(
"The Java Virtual Machine Specification");
category.add(book);
// Language Spec
book = new DefaultMutableTreeNode("The Java Language Specification");
category.add(book);
return new DefaultTreeModel(root);
}
}
----- Revision r2 - 03 Jun 2008 - 23:51:34 - Main.aberrant
|