Swing——动作(Action)
来源:互联网 发布:java中setname方法 编辑:程序博客网 时间:2024/05/29 03:23
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41258997
Action接口扩展于ActionListener接口。
public Object getValue(String key);
public void putValue(String key, Object value);
public void setEnabled(boolean b);
public boolean isEnabled();
public void addPropertyChangeListener(PropertyChangeListener listener);
public void removePropertyChangeListener(PropertyChangeListener listener);
实现Action接口的所有类必须实现上面的7个方法,AbstractAction类实现了该接口除了actionPerformed方法之外的所有方法。
可以直接扩展AbstractAction类,并在扩展中实现actionPerformed方法
Action redAction = new ColorAction1("red",new ImageIcon("red.gif"),Color.red);
将这个动作与一个按钮关联起来
JButton redButton = new JButton(redAction);
想要将动作添加到击键中,以便用户通过敲击键盘命令来执行这项动作
首先,需要生成KeyStroke类对象,该对象封装了对键的说明,调用其静态方法: KeyStroke ctrlBKey = KeyStroke.getKeyStroke("ctrl B");
可以使用getInputMap方法从组件中得到输入映射:InputMap imap = panel.getInputMap(JComponent.WHEN_FOCUSED);//当这个组件拥有键盘焦点时
InputMap不能直接将KeyStroke对象映射到Action对象,而是先映射到任意对象上,然后由ActionMap类实现将对象映射到动作上的第二个映射
这样可实现来自不同输入映射的击键共享一个动作
每个组件都可以有三个输入映射和一个动作映射,将键与动作关联起来:
imap.put(KeyStroke.getKeyStroke("ctrl Y"),"panel.yellow");
ActionMap amap = panel.getActionMap();
amap.put("panel.yellow",yellowAction);
使用字符串none表示空动作,可以轻松地取消一个键动作
imap.put(KeyStroke.getKeyStroke("ctrl C"),"none");
用同一个动作响应按钮、菜单项或击键的方式:
(1)实现一个扩展于AbstractAction类的类,多个相关的动作可以使用同一个类。
(2)构造一个动作类对象。
(3)使用动作对象创建按钮或菜单项。构造器将从动作对象中读取标签文本和图标。
(4)为通过击键触发动作,首先,定位顶层窗口组件;然后,得到顶层组件的WHEN_ANCESTOR_OF_FOCUS_COMPONENT输入映射。为需要的击键创建一个
KeyStrike对象。创建一个描述动作字符串这样的动作键对象,将动作键添加到输入映射中;最后,得到顶层组件的动作映射,将动作键添加到映射中。
Action动作和击键操作的实例如下:
import java.awt.Color;import java.awt.EventQueue;import java.awt.event.ActionEvent;import javax.swing.AbstractAction;import javax.swing.Action;import javax.swing.ActionMap;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.InputMap;import javax.swing.JButton;import javax.swing.JComponent;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.KeyStroke;public class TestAction {public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {@Overridepublic void run() {ActionFrame frame = new ActionFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}});}}class ActionFrame extends JFrame {private JPanel buttonPanel;public ActionFrame() {setTitle("test");setSize(200, 200);buttonPanel = new JPanel();Action yellowAction = new ColorAction("yellow", new ImageIcon("yellow.gif"), Color.YELLOW);Action blueAction = new ColorAction("blue", new ImageIcon("blue.gif"),Color.BLUE);Action redAction = new ColorAction("red", new ImageIcon("red.gif"),Color.RED);buttonPanel.add(new JButton(yellowAction));buttonPanel.add(new JButton(blueAction));buttonPanel.add(new JButton(redAction));InputMap imap = buttonPanel.getInputMap(JComponent.WHEN_FOCUSED);// 当这个组件拥有键盘焦点时imap.put(KeyStroke.getKeyStroke("ctrl Y"), "panel.yellow");imap.put(KeyStroke.getKeyStroke("ctrl B"), "panel.blue");imap.put(KeyStroke.getKeyStroke("ctrl R"), "panel.red");ActionMap amap = buttonPanel.getActionMap();amap.put("panel.yellow", yellowAction);amap.put("panel.blue", blueAction);amap.put("panel.red", redAction);}}class ColorAction extends AbstractAction {private JPanel buttonPanel;public ColorAction(String name, Icon icon, Color c) {putValue(Action.NAME, name);putValue(Action.SMALL_ICON, icon);putValue("color", c);putValue(Action.SHORT_DESCRIPTION,"set panel color to" + name.toLowerCase());}@Overridepublic void actionPerformed(ActionEvent e) {Color c = (Color) getValue("color");buttonPanel.setBackground(c);}}
- Swing——动作(Action)
- Swing——鼠标(Action)
- Cocos2dx—动作类Action
- Cocos2d-x ——Action (动作)简介
- Cocos2d-x ——Action (动作)简介
- coco2dx-动作(Action)原理
- Struts(7)Action动作
- Struts(7)Action动作
- LibGDX_4.8: 动作(Action)
- Cocos2d-动作(Action)详解
- 安卓开发 中文教程(14):新手福音——动作栏(Action Bar)
- Asp.Net MVC学习总结(二)——控制器与动作(Controller And Action)
- Asp.Net MVC学习总结(二)——控制器与动作(Controller And Action)
- Asp.Net MVC学习总结(二)——控制器与动作(Controller And Action)
- WebWork-Action(动作)——用户注册实例
- Action 动作
- Action 动作
- Action 动作
- hdu 1150 Machine Schedule
- 查看linux系统信息
- Windows8.1上安装帝特USB to RS232串口转接线驱动
- ORA-02292: 违反完整约束条件 (用户名.约束名) - 已找到子记录
- java线程同步方法,方法块区别
- Swing——动作(Action)
- 鹅厂网事:全局精确流量调度新思路-HttpDNS服务详解
- 当oracle Session被锁死的时候
- 经典排序算法——桶排序
- 死锁产生的原因及四个必要条件
- 读取文件--防止乱码方法
- php错误日志
- viewpager和viewFlipper
- OpenStack云桌面系列【2】—OpenStack和Spice