java.net: Wiki

The Source for Java Technology Collaboration


 <<O>>  Difference Topic NodeRolloverDemo (2 - 03 Jun 2008 - Main.aberrant)
Line: 1 to 1
 
META TOPICPARENT name="Javatutorials"
-- Main.aberrant - 03 Jun 2008

Demonstrates how to highlight a node in a tree when the mouse is over it.

Added:
>
>

 
import java.awt.BorderLayout;
import java.awt.Color;

 <<O>>  Difference Topic NodeRolloverDemo (1 - 03 Jun 2008 - Main.aberrant)
Line: 1 to 1
Added:
>
>
META TOPICPARENT name="Javatutorials"
-- 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);
   }
}


Topic NodeRolloverDemo . { View | Diffs r2 < r1 | More }
 XML java.net RSS