⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buttonsnooper.java

📁 一个用java开发界面的程序集(jfc核心编程)
💻 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 + -