1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
/*
* ToolButton.java
*
* Created on 15 February 2003, 20:27
*/
package org.tigris.toolbutton;
import java.awt.Color;
import java.awt.Insets;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.UIManager;
/**
* An extension of JButton which gives rollover effect for all plafs. Even
* those not provided for in JDK1.3
* @author Bob Tarling
*/
public class ToolButton extends JButton {
protected ArrayList containedGroups = new ArrayList();
protected JButton _button;
protected boolean selected;
private boolean _rollover;
private static String javaVersion =
System.getProperties().getProperty("java.specification.version");
public ToolButton(Action a) {
super(a);
addMouseListener(new MyMouseListener());
if ("1.3".equals(System.getProperties().getProperty("java.specification.version"))) {
setMargin(new Insets(0,0,0,0));
}
}
void setInGroup(ToolButtonGroup group) {
containedGroups.add(group);
}
public void setRolloverEnabled(boolean enabled) {
super.setRolloverEnabled(enabled);
_rollover = enabled;
}
public void setSelected(boolean selected) {
this.selected = selected;
if (selected) {
setBackground(UIManager.getColor("controlShadow"));
super.setRolloverEnabled(false);
Iterator it = containedGroups.iterator();
while (it.hasNext()) {
ToolButtonGroup sbg = (ToolButtonGroup)it.next();
sbg.buttonSelected(this);
}
//getModel().setPressed(true);
//getModel().setArmed(true);
} else {
//getModel().setPressed(false);
//getModel().setArmed(false);
setBackground(UIManager.getColor("control"));
super.setRolloverEnabled(_rollover);
}
}
public Action getRealAction() {
return _button.getAction();
}
protected void performAction(java.awt.event.ActionEvent actionEvent) {
// Toggle the selected state and then trigger the real action
setSelected(!selected);
Action a = _button.getAction();
a.actionPerformed(actionEvent);
}
protected class ToolButtonAction extends AbstractButtonAction {
public ToolButtonAction() {
super();
}
public void actionPerformed(java.awt.event.ActionEvent actionEvent) {
performAction(actionEvent);
}
}
/**
* If the button is selected it needs to show the border even when rollover effect is on
* and the mouse is not over.
*/
private class MyMouseListener implements MouseListener {
/**
* Empty method to satisy interface only, there is no special
* action to take place when the mouse first enters the
* PopupToolBoxButton area
*/
public void mouseEntered(MouseEvent me) {
if (getRealAction().isEnabled()) {
setBorderPainted(true);
}
}
/**
* Be double sure the dropdowns rollover divider is removed when we leave the
* button.
*/
public void mouseExited(MouseEvent me) {
if (selected) {
//ToolButton.this.getModel().setPressed(true);
//ToolButton.this.getModel().setArmed(true);
} else {
setBorderPainted(false);
}
}
public void mouseClicked(MouseEvent me) {
//ToolButton.this.getModel().setArmed(true);
}
/**
* Empty method to satisy interface only, there is no special
* action to take place when the mouse is pressed on the
* PopupToolBoxButton area
*/
public void mousePressed(MouseEvent me) {}
/**
* Empty method to satisy interface only, there is no special
* action to take place when the mouse is released on the
* PopupToolBoxButton area
*/
public void mouseReleased(MouseEvent me) {}
}
}
|