1 19 20 package com.sshtools.ui.swing; 21 22 import java.awt.Insets ; 23 import java.awt.event.MouseAdapter ; 24 import java.awt.event.MouseEvent ; 25 import java.beans.PropertyChangeEvent ; 26 import java.beans.PropertyChangeListener ; 27 28 import javax.swing.Action ; 29 import javax.swing.Icon ; 30 import javax.swing.JButton ; 31 import javax.swing.JToggleButton ; 32 import javax.swing.KeyStroke ; 33 import javax.swing.UIManager ; 34 35 public class ToolBarToggleButton extends JToggleButton { 36 private final static Insets INSETS = new Insets (0, 0, 0, 0); 38 private boolean hideText; 40 private boolean enablePlasticWorkaround; 41 42 public ToolBarToggleButton(AbstractToggleableAction action) { 43 this(action, true); 44 } 45 46 public ToolBarToggleButton(AbstractToggleableAction action, boolean useLargeIcon) { 47 this(action, useLargeIcon, true); 48 } 49 50 public ToolBarToggleButton(AbstractToggleableAction action, boolean useLargeIcon, boolean showSelectiveText) { 51 super(); 52 init(action, useLargeIcon ? AppAction.LARGE_ICON : AppAction.SMALL_ICON, showSelectiveText); 53 } 54 55 public ToolBarToggleButton(AbstractToggleableAction action, String iconKey, boolean showSelectiveText) { 56 super(); 57 init(action, iconKey, showSelectiveText); 58 } 59 60 public void setSelected(boolean b) { 61 System.out.println("Setting " + getAction().getValue(Action.NAME) + " to " + b); 62 super.setSelected(b); 63 if (!isSelected()) { 64 setBorderPainted(false); 65 setContentAreaFilled(enablePlasticWorkaround); 66 } 67 } 68 69 private void init(AbstractToggleableAction a, String iconKey, boolean showText) { 70 enablePlasticWorkaround = UIManager.getLookAndFeel().getClass().getName().startsWith("com.jgoodies.looks.plastic."); 71 setAction(a); 72 addMouseListener(new MouseAdapter () { 73 public void mouseEntered(MouseEvent e) { 74 if (isEnabled() || isSelected()) { 75 setBorderPainted(true); 76 if (!enablePlasticWorkaround) { 77 setContentAreaFilled(true); 78 } 79 } 80 } 81 82 public void mouseExited(MouseEvent e) { 83 if (!isSelected()) { 84 setBorderPainted(false); 85 setContentAreaFilled(enablePlasticWorkaround); 86 } 87 } 88 }); 89 setBorderPainted(false); 90 setContentAreaFilled(enablePlasticWorkaround); 91 if (a != null && a.getValue(Action.ACCELERATOR_KEY) != null) { 92 setMnemonic(0); 93 registerKeyboardAction(a, (KeyStroke ) a.getValue(Action.ACCELERATOR_KEY), JButton.WHEN_IN_FOCUSED_WINDOW); 94 } 95 setIcon((Icon ) a.getValue(iconKey)); 96 if (Boolean.FALSE.equals(a.getValue(AppAction.TEXT_ON_TOOLBAR)) || !showText) { 97 setHideText(true); 98 } else { 99 setHideText(false); 100 } 101 setVerticalTextPosition(JButton.BOTTOM); 102 setHorizontalTextPosition(JButton.CENTER); 103 a.addPropertyChangeListener(new PropertyChangeListener () { 104 public void propertyChange(PropertyChangeEvent evt) { 105 if (evt.getPropertyName().equals("selected")) { 106 boolean sel = ((Boolean ) evt.getNewValue()).booleanValue(); 107 setSelected(sel); 108 } 109 } 110 }); 111 setSelected(a.isSelected()); 112 } 113 114 public Insets getMargin() { 115 return INSETS; 116 } 117 118 public boolean isRequestFocusEnabled() { 119 return false; 120 } 121 122 public boolean isFocusTraversable() { 123 return false; 124 } 125 126 public void setHideText(boolean hideText) { 127 if (this.hideText != hideText) { 128 firePropertyChange("hideText", this.hideText, hideText); 129 } 130 this.hideText = hideText; 131 this.setHorizontalTextPosition(ToolBarToggleButton.RIGHT); 132 repaint(); 133 } 134 135 public String getText() { 136 return hideText ? null : super.getText(); 137 } 138 } | Popular Tags |