package com.onaro.util.jfc; import java.beans.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.*; /** * A button for use in the shortcuts pane in which the label is always painted * as a simple label (with no button effects) and yet it behave's like part */ public class ShortcutButton extends JPanel implements MouseListener { private static final long serialVersionUID = 1L; JButton button; JLabel label; public ShortcutButton(Action action) { setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); button = new JButton(action) { private static final long serialVersionUID = 1L; public String getText() { return null; } }; button.setAlignmentX(CENTER_ALIGNMENT); button.setMargin(new Insets(0,0,0,0)); add(button); label = new JLabel((String) action.getValue(Action.NAME)); label.setAlignmentX(CENTER_ALIGNMENT); label.setLabelFor(button); label.addMouseListener(this); add(label); button.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent e) { label.setEnabled(button.isEnabled()); } } ); } public void mouseClicked(MouseEvent e) { fireMouseEvent(e); } public void mousePressed(MouseEvent e) { fireMouseEvent(e); } public void mouseReleased(MouseEvent e) { fireMouseEvent(e); } public void mouseEntered(MouseEvent e) { fireMouseEvent(e); } public void mouseExited(MouseEvent e) { fireMouseEvent(e); } private void fireMouseEvent(MouseEvent e) { EventListener listeners[] = button.getListeners(MouseListener.class); for (int i = 0; i < listeners.length; ++i) { MouseListener mouseListener = (MouseListener) listeners[i]; MouseEvent ne = new MouseEvent(button, e.getID(), e.getWhen(), e.getModifiers(), e.getX(), e.getY(), e.getClickCount(), e.isPopupTrigger()); switch (e.getID()) { case MouseEvent.MOUSE_CLICKED: mouseListener.mouseClicked(ne); break; case MouseEvent.MOUSE_PRESSED: mouseListener.mousePressed(ne); break; case MouseEvent.MOUSE_RELEASED: mouseListener.mouseReleased(ne); break; case MouseEvent.MOUSE_ENTERED: mouseListener.mouseEntered(ne); break; case MouseEvent.MOUSE_EXITED: mouseListener.mouseExited(ne); break; } } } public void setFocusPainted(boolean b) { button.setFocusPainted(b); } public Dimension getPreferredSize() { Dimension size = super.getPreferredSize(); size.width += 5; size.height += 5; return size; } public Dimension getMinimumSize() { Dimension size = super.getMinimumSize(); size.width += 5; size.height += 5; return size; } }