动作、按键

package GUI;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
 *
 * @author Zhu Zhengyan
 */
public class My_GUI5 {
    public static void main(String[] args)
    {
        EventQueue.invokeLater(()->{
            JFrame frame = new ActionFrame();
            frame.setTitle("Color");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true); 
        });
    }
}
class ActionFrame extends JFrame
{
    private JPanel buttonPanel;
    private static final int DEFAULT_WIDTH = 300;
    private static final int DEFAULT_HEIGHT = 200;
    
    public ActionFrame()
    {
        setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
        buttonPanel = new JPanel();
        
        Action yellowAction = new ColorAction("Yellow",new ImageIcon("yellow-ball.gif"),Color.YELLOW,"1");
        Action blueAction = new ColorAction("Blue",new ImageIcon("blue-ball.gif"),Color.BLUE,"2");
        Action redAction = new ColorAction("Red",new ImageIcon("red-ball.gif"),Color.RED,"3");
        
        buttonPanel.add(new JButton(yellowAction));
        buttonPanel.add(new JButton(blueAction));
        buttonPanel.add(new JButton(redAction));
        
        add(buttonPanel);
        
        InputMap imap = buttonPanel.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);//输入映射,绿字为输入映射的条件
        
        imap.put(KeyStroke.getKeyStroke("ctrl Y"),"panel.yellow");//第一个参数是键盘上的键(字符串)
        imap.put(KeyStroke.getKeyStroke("ctrl B"),"panel.blue");  //第二个参数个人认为就是一个任意的对象,随意
        imap.put(KeyStroke.getKeyStroke("ctrl R"),"panel.red");
        //我认为输入映射把键盘按键映射到任意对象(或许就是参数2),然后再用动作映射把任意对象映射到动作上
        ActionMap amap = buttonPanel.getActionMap();//动作映射
        
        amap.put("panel.yellow", yellowAction);
        amap.put("panel.blue", blueAction);
        amap.put("panel.red", redAction);
    }
    
    class ColorAction extends AbstractAction
{
    public ColorAction(String name,Icon icon,Color c,String d)
    {
        putValue(Action.NAME,name);
        putValue(Action.SMALL_ICON,icon);
        putValue(Action.SHORT_DESCRIPTION,"Set panel color to"+name.toLowerCase());
        putValue("color",c);
        putValue("nihao",d);//个人理解,把d以object形式存储在字符串“nihao”中
    }
    public void actionPerformed(ActionEvent event)
    {
        Color c = (Color)getValue("color");   //getValue返回值是object
        buttonPanel.setBackground(c);
        String d= (String)getValue("nihao");  //后面为原创
        JButton button = new JButton("123");  
        buttonPanel.add(button);
        button.setText(d);
    }
}
}

core java 1 P457
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值