Frames | No Frames |
1: /* SwingButtonPeer.java -- A Swing based peer for AWT buttons 2: Copyright (C) 2006 Free Software Foundation, Inc. 3: 4: This file is part of GNU Classpath. 5: 6: GNU Classpath is free software; you can redistribute it and/or modify 7: it under the terms of the GNU General Public License as published by 8: the Free Software Foundation; either version 2, or (at your option) 9: any later version. 10: 11: GNU Classpath is distributed in the hope that it will be useful, but 12: WITHOUT ANY WARRANTY; without even the implied warranty of 13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14: General Public License for more details. 15: 16: You should have received a copy of the GNU General Public License 17: along with GNU Classpath; see the file COPYING. If not, write to the 18: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19: 02110-1301 USA. 20: 21: Linking this library statically or dynamically with other modules is 22: making a combined work based on this library. Thus, the terms and 23: conditions of the GNU General Public License cover the whole 24: combination. 25: 26: As a special exception, the copyright holders of this library give you 27: permission to link this library with independent modules to produce an 28: executable, regardless of the license terms of these independent 29: modules, and to copy and distribute the resulting executable under 30: terms of your choice, provided that you also meet, for each linked 31: independent module, the terms and conditions of the license of that 32: module. An independent module is a module which is not derived from 33: or based on this library. If you modify this library, you may extend 34: this exception to your version of the library, but you are not 35: obligated to do so. If you do not wish to do so, delete this 36: exception statement from your version. */ 37: 38: package gnu.java.awt.peer.swing; 39: 40: import java.awt.Button; 41: import java.awt.Graphics; 42: import java.awt.Image; 43: import java.awt.Point; 44: import java.awt.event.ActionEvent; 45: import java.awt.event.ActionListener; 46: import java.awt.event.KeyEvent; 47: import java.awt.event.MouseEvent; 48: import java.awt.peer.ButtonPeer; 49: 50: import javax.swing.JButton; 51: import javax.swing.JComponent; 52: 53: /** 54: * A Swing based peer for the AWT button. 55: * 56: * @author Roman Kennke (kennke@aicas.com) 57: */ 58: public class SwingButtonPeer 59: extends SwingComponentPeer 60: implements ButtonPeer 61: { 62: 63: /** 64: * A specialized Swing button to be used as AWT button. 65: * 66: * @author Roman Kennke (kennke@aicas.com) 67: */ 68: class SwingButton 69: extends JButton 70: implements SwingComponent 71: { 72: /** 73: * Overridden so that this method returns the correct value even without a 74: * peer. 75: * 76: * @return the screen location of the button 77: */ 78: public Point getLocationOnScreen() 79: { 80: return SwingButtonPeer.this.getLocationOnScreen(); 81: } 82: 83: /** 84: * Overridden so that the isShowing method returns the correct value for the 85: * swing button, even if it has no peer on its own. 86: * 87: * @return <code>true</code> if the button is currently showing, 88: * <code>false</code> otherwise 89: */ 90: public boolean isShowing() 91: { 92: boolean retVal = false; 93: if (SwingButtonPeer.this.awtComponent != null) 94: retVal = SwingButtonPeer.this.awtComponent.isShowing(); 95: return retVal; 96: } 97: 98: /** 99: * Overridden, so that the Swing button can create an Image without its 100: * own peer. 101: * 102: * @param w the width of the image 103: * @param h the height of the image 104: * 105: * @return an image 106: */ 107: public Image createImage(int w, int h) 108: { 109: return SwingButtonPeer.this.createImage(w, h); 110: } 111: 112: /** 113: * Overridden, so that the Swing button can create a Graphics without its 114: * own peer. 115: * 116: * @return a graphics instance for the button 117: */ 118: public Graphics getGraphics() 119: { 120: return SwingButtonPeer.this.getGraphics(); 121: } 122: 123: /** 124: * Returns this button. 125: * 126: * @return this button 127: */ 128: public JComponent getJComponent() 129: { 130: return this; 131: } 132: 133: /** 134: * Handles mouse events by forwarding it to 135: * <code>processMouseEvent()</code> after having retargetted it to this 136: * button. 137: * 138: * @param ev the mouse event 139: */ 140: public void handleMouseEvent(MouseEvent ev) 141: { 142: ev.setSource(this); 143: processMouseEvent(ev); 144: } 145: 146: /** 147: * Handles mouse motion events by forwarding it to 148: * <code>processMouseMotionEvent()</code> after having retargetted it to 149: * this button. 150: * 151: * @param ev the mouse motion event 152: */ 153: public void handleMouseMotionEvent(MouseEvent ev) 154: { 155: ev.setSource(this); 156: processMouseMotionEvent(ev); 157: } 158: 159: /** 160: * Handles key events by forwarding it to 161: * <code>processKeyEvent()</code> after having retargetted it to this 162: * button. 163: * 164: * @param ev the mouse event 165: */ 166: public void handleKeyEvent(KeyEvent ev) 167: { 168: ev.setSource(this); 169: processKeyEvent(ev); 170: } 171: } 172: 173: /** 174: * Listens for ActionEvents on the Swing button and triggers corresponding 175: * ActionEvents on the AWT button. 176: * 177: * @author Roman Kennke (kennke@aicas.com) 178: */ 179: class SwingButtonListener implements ActionListener 180: { 181: 182: /** 183: * Receives notification when an action was performend on the button. 184: * 185: * @param event the action event 186: */ 187: public void actionPerformed(ActionEvent event) 188: { 189: Button b = (Button) SwingButtonPeer.this.awtComponent; 190: ActionListener[] l = b.getActionListeners(); 191: if (l.length == 0) 192: return; 193: ActionEvent ev = new ActionEvent(b, ActionEvent.ACTION_PERFORMED, 194: b.getActionCommand()); 195: for (int i = 0; i < l.length; ++i) 196: l[i].actionPerformed(ev); 197: } 198: 199: } 200: 201: /** 202: * Constructs a new SwingButtonPeer. 203: * 204: * @param theButton the AWT button for this peer 205: */ 206: public SwingButtonPeer(Button theButton) 207: { 208: SwingButton button = new SwingButton(); 209: button.setText(theButton.getLabel()); 210: button.addActionListener(new SwingButtonListener()); 211: init(theButton, button); 212: } 213: 214: /** 215: * Sets the label of the button. This call is forwarded to the setText method 216: * of the managed Swing button. 217: * 218: * @param label the label to set 219: */ 220: public void setLabel(String label) 221: { 222: ((SwingButton) swingComponent).setText(label); 223: } 224: }