改变颜色与样式的Button(加强版)

来源:互联网 发布:数据可视化界面设计 编辑:程序博客网 时间:2024/05/15 02:34

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class FirstSample{
    public static void main(String[] args){
        ButtonFrame frame=new ButtonFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class ButtonFrame extends JFrame{
    public ButtonFrame(){
        setTitle("Michael");
        setSize(WIDTH,HEIGHT);
       
        ButtonPanel panel=new ButtonPanel();
        add(panel);
    }
   
    public static final int WIDTH=800;
    public static final int HEIGHT=600;
}

class ButtonPanel extends JPanel{
    public ButtonPanel(){
        Action redAction=new ColorAction("Yellow",new ImageIcon("red.gif"),Color.RED);
        Action greenAction=new ColorAction("Green",new ImageIcon("green.gif"),Color.GREEN);
        Action blueAction=new ColorAction("Blue",new ImageIcon("blue.gif"),Color.BLUE);
        Action whiteAction=new ColorAction("White",new ImageIcon("white.gif"),Color.WHITE);
        
        add(new JButton(redAction));
        add(new JButton(greenAction));
        add(new JButton(blueAction));
        add(new JButton(whiteAction));
       
        InputMap imap=getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
        imap.put(KeyStroke.getKeyStroke("ctrl R"), "panel.red");
        imap.put(KeyStroke.getKeyStroke("ctrl G"), "panel.green");
        imap.put(KeyStroke.getKeyStroke("ctrl B"), "panel.blue");
        imap.put(KeyStroke.getKeyStroke("ctrl W"), "panel.white");
        
        ActionMap amap=getActionMap();
        amap.put("panel.red",redAction);
        amap.put("panel.green",greenAction);
        amap.put("panel.blue",blueAction);
        amap.put("panel.white",whiteAction);
        
        UIManager.LookAndFeelInfo[] infos=UIManager.getInstalledLookAndFeels();
        for(UIManager.LookAndFeelInfo info:infos)
            makeButton(info.getName(),info.getClassName());
    }
   
    void makeButton(String name,final String plafName){
        JButton button=new JButton(name);
        add(button);
       
        button.addActionListener(new
            ActionListener(){
                public void actionPerformed(ActionEvent event){
                    try{
                        UIManager.setLookAndFeel(plafName);
                        SwingUtilities.updateComponentTreeUI(ButtonPanel.this);
                    }
                    catch (Exception e){
                        e.printStackTrace();
                    }
                }
            });
    }
    
    public class ColorAction extends AbstractAction{
        public ColorAction(String name,Icon icon,Color c){
            putValue(Action.NAME,name);
            putValue(Action.SMALL_ICON,icon);
            putValue(Action.SHORT_DESCRIPTION,"Set the panel color to"+name.toLowerCase());
            putValue("color",c);
        }
        
        public void actionPerformed(ActionEvent event){
            Color c=(Color) getValue("color");
            setBackground(c);
        }
    }

}

原创粉丝点击