001 /* 002 * Created on 21/7/2004 003 * 004 * Copyright (C) 2004 Denis Krukovsky. All rights reserved. 005 * ==================================================================== 006 * The Software License (based on Apache Software License, Version 1.1) 007 * 008 * Redistribution and use in source and binary forms, with or without 009 * modification, are permitted provided that the following conditions 010 * are met: 011 * 012 * 1. Redistributions of source code must retain the above copyright 013 * notice, this list of conditions and the following disclaimer. 014 * 015 * 2. Redistributions in binary form must reproduce the above copyright 016 * notice, this list of conditions and the following disclaimer in 017 * the documentation and/or other materials provided with the 018 * distribution. 019 * 020 * 3. The end-user documentation included with the redistribution, 021 * if any, must include the following acknowledgment: 022 * "This product includes software developed by 023 * Denis Krukovsky (dkrukovsky at yahoo.com)." 024 * Alternately, this acknowledgment may appear in the software itself, 025 * if and wherever such third-party acknowledgments normally appear. 026 * 027 * 4. The names "dot useful" and "Denis Krukovsky" must not be used to 028 * endorse or promote products derived from this software without 029 * prior written permission. For written permission, please 030 * contact dkrukovsky at yahoo.com. 031 * 032 * 5. Products derived from this software may not be called "useful", 033 * nor may "useful" appear in their name, without prior written 034 * permission of Denis Krukovsky. 035 * 036 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 037 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 038 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 039 * DISCLAIMED. IN NO EVENT SHALL JIVE SOFTWARE OR 040 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 041 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 042 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 043 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 044 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 045 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 046 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 047 * SUCH DAMAGE. 048 * ==================================================================== 049 */ 050 051 package org.dotuseful.ui.tree; 052 053 import java.awt.event.MouseAdapter; 054 import java.awt.event.MouseEvent; 055 import java.awt.event.MouseListener; 056 057 import javax.swing.JTree; 058 import javax.swing.tree.TreePath; 059 060 /** 061 * A mouse handler for MouseAdaptedTree which transmits mouse events to 062 * corresponding tree nodes. Tree nodes must implement MouseListener interface. 063 * <br> 064 * Unfortunately you can't transmit mouseEntered and mouseExited events in easy 065 * way because these events are fired for JTree component at all. 066 * 067 * @author Denis Krukovsky 068 */ 069 public class MouseAdaptedTreeMouseHandler extends MouseAdapter { 070 /* 071 * (non-Javadoc) 072 * 073 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent) 074 */ 075 public void mouseClicked(MouseEvent e) { 076 MouseListener node = getNode(e); 077 if (node != null) { 078 node.mouseClicked(e); 079 } 080 } 081 082 public void mousePressed(MouseEvent e) { 083 MouseListener node = getNode(e); 084 if (node != null) { 085 node.mousePressed(e); 086 } 087 } 088 089 public void mouseReleased(MouseEvent e) { 090 MouseListener node = getNode(e); 091 if (node != null) { 092 node.mouseReleased(e); 093 } 094 } 095 096 /** 097 * Returns a tree node which is mouse event on. 098 * 099 * @param e 100 * a mouse event to calculate the node to 101 * @return a tree node which is mouse event on, or null if there is no node. 102 */ 103 protected MouseListener getNode(MouseEvent e) { 104 JTree tree = getTree(e); 105 int x = e.getX(); 106 int y = e.getY(); 107 TreePath path = tree.getPathForLocation(x, y); 108 if (path != null) { 109 return (MouseListener) (path.getLastPathComponent()); 110 } else { 111 return null; 112 } 113 } 114 115 protected JTree getTree(MouseEvent e) { 116 return (JTree) (e.getSource()); 117 } 118 }