📄 buttonsnooper.java
字号:
package JFCBook.Chapter6.jdk13;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
public class ButtonSnooper implements ChangeListener {
public static final String ARMED_BUTTON = "armedButton";
public static final String PRESSED_BUTTON = "pressedButton";
private AbstractButton armedButton;
private AbstractButton pressedButton;
private Hashtable modelMap = new Hashtable();
private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
public void attachToMenuBar(JMenuBar menuBar) {
int count = menuBar.getMenuCount();
for (int i = 0; i < count; i++) {
attachToMenu(menuBar.getMenu(i));
}
}
public void attachToMenu(JMenu menu) {
Component[] comps = menu.getMenuComponents();
for (int i = 0; i < comps.length; i++) {
Component comp = comps[i];
if (comp instanceof JMenu) {
// Submenu - recurse
attachToMenu((JMenu)comp);
} else if (comp instanceof JMenuItem) {
attachToButton((JMenuItem)comp);
}
}
}
public void attachToButton(AbstractButton button) {
ButtonModel model = button.getModel();
if (!modelMap.containsKey(model)) {
modelMap.put(model, button);
model.addChangeListener(this);
}
}
public void attachToButtons(Container cont) {
Component[] components = cont.getComponents();
for (int i = 0; i < components.length; i++) {
Component comp = components[i];
if (comp instanceof AbstractButton) {
attachToButton((AbstractButton)comp);
} else if (comp instanceof Container &&
((Container)comp).getComponentCount() > 0) {
attachToButtons((Container)comp);
}
}
}
public AbstractButton getArmedButton() {
return armedButton;
}
public AbstractButton getPressedButton() {
return pressedButton;
}
public void addPropertyChangeListener(PropertyChangeListener l) {
changeSupport.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l) {
changeSupport.removePropertyChangeListener(l);
}
// Implementation of ChangeListener interface
public void stateChanged(ChangeEvent evt) {
ButtonModel model = (ButtonModel)evt.getSource();
AbstractButton button = (AbstractButton)modelMap.get(model);
if (button != null) {
if (model.isArmed()) {
setArmedButton(button);
} else if (button == armedButton) {
setArmedButton(null);
}
if (model.isPressed()) {
setPressedButton(button);
} else if (button == pressedButton) {
setPressedButton(null);
}
}
}
private void setArmedButton(AbstractButton button) {
AbstractButton oldButton = armedButton;
armedButton = button;
changeSupport.firePropertyChange(ARMED_BUTTON, oldButton, armedButton);
}
private void setPressedButton(AbstractButton button) {
AbstractButton oldButton = pressedButton;
pressedButton = button;
changeSupport.firePropertyChange(PRESSED_BUTTON, oldButton, pressedButton);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -