本文是在学习中的总结,欢迎转载但请注明出处: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() {

			@Override
			public 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());
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Color c = (Color) getValue("color");
		buttonPanel.setBackground(c);
	}
}

Swing——动作(Action)的更多相关文章

  1. Java基础之处理事件——使用动作Action(Sketcher 6 using Action objects)

    控制台程序. 动作Action是任何实现了javax.swing.Action接口的类的对象.这个接口声明了操作Action对象的方法,例如,存储与动作相关的属性.启用和禁用动作.Action接口扩展 ...

  2. Learning Cocos2d-x for WP8(8)——动作Action

    原文:Learning Cocos2d-x for WP8(8)--动作Action 游戏很大程度上是由动作画面支撑起来的. 动作分为两大类:瞬间动作和延时动作. 瞬间动作基本等同于设置节点的属性,延 ...

  3. 08 Zabbix4.0系统配置事件通知 - 动作Action

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 08 Zabbix4.0系统配置事件通知 - 动作Action 请点击查看Zabbix3.0.8版 ...

  4. 动作Action

    /** * DelayTime延迟 * @param d Duration 延迟时间 */ auto delayTime = DelayTime::create(); sprite->runAc ...

  5. 创建一个动作-Action类:

    让我们创建一个Java文件HelloWorldAction.java的Java资源> SRC下一个的包名com.yiibai.struts2与下面的内容. package com.yiibai. ...

  6. libgdx学习记录6——动作Action

    libgdx中的Action类能够有效的帮助我们实现位移.旋转.缩放.淡入淡出等效果,对游戏的设计很有用. Action是一个抽象类,本身不可以实例化.一般使用的它的继承类,常用的有 MoveToAc ...

  7. Asp.Net MVC学习总结(二)——控制器与动作(Controller And Action)

    一.理解控制器 1.1.什么是控制器 控制器是包含必要的处理请求的.NET类,控制器的角色封装了应用程序逻辑,控制器主要是负责处理请求,实行对模型的操作,选择视图呈现给用户. 简单理解:实现了ICon ...

  8. Struts2 In Action笔记_页面到动作的数据流入和流出

    因为回答百度知道的一个问题,仔细查看了<Struts2 In Action>,深入细致的看了 “数据转移OGNL 和 构建视图-标签”,很多东西才恍然大悟. 一直觉得国外写的书很浮,不具有 ...

  9. 实验十四 第九组 张燕~杨蓉庆~杨玲 Swing图形界面组件

    实验十四  Swing图形界面组件 8-11-29 理论知识 Swing和MVC设计模式 (1)设计模式(Design pattern)是设计者一种流行的 思考设计问题的方法,是一套被反复使用,多数人 ...

随机推荐

  1. webstorm 设置uglify 压缩js文件

    第一步:打开npm,全局安装 npm install uglify-js -g 第二步: 打开webstorm的file->settings ->External Tools,点击左上角的 ...

  2. 算法导轮之B树的学习

    最近学习了算法导轮里B树相关的知识,在此写一篇博客作为总结. 1.引言 B树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡搜索树.B树类似于红黑树,但它与红黑树最大不同之处在于B树的节点可以拥有 ...

  3. 【转】动态规划DP

    [数据结构与算法] DP 动态规划 介绍 原创 2017年02月13日 00:42:51 最近在看算法导论. DP全称是dynamic programming,这里programming不是编程,是一 ...

  4. Java不走弯路教程(1.环境搭建)

    1.环境搭建在开始写第一个Java程序之前,我们需要做一些简单的准备工作. 1.1 还记得DOS吗 我们可以通过图形界面来操作我们的电脑.但作为程序员,你首先需要学会用命令行的方式来操作电脑,因为不是 ...

  5. 韩顺平玩转Oracle视频资料整理

    .oracle10g 11g:g(grid)表示网格技术 以baidu搜索为准,现在想使用一个软件,但是此软件在离自己非常近的地方就存在了下载地址,但是与自己非常远的地方也同样存在一个下载地址,而搜索 ...

  6. docker管理工具

    Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台操作.Swarm集群和服 ...

  7. 中间件——canal小记

    接到个小需求,将mysql的部分数据增量同步到es,但是不仅仅是使用canal而已,整体的流程是mysql>>canal>>flume>>kafka>> ...

  8. Java为什么要配置环境变量及如何配置环境变量

    在没有配置环境变量之前,用cmd执行Java文件,需要指明Java的可执行文件,否则无法运行. 配置环境是为了在不用切换可执行文件目录下,方便Java程序的执行和控制. 那么环境变量就是让系统根据环境 ...

  9. Go 语言环境安装

    Go 语言支持以下系统: Linux FreeBSD Mac OS X(也称为 Darwin) Window 安装包下载地址为:https://golang.org/dl/. 各个系统对应的包名: 操 ...

  10. Programming In Scala笔记-第十一章、Scala中的类继承关系

    本章主要从整体层面了解Scala中的类层级关系. 一.Scala的类层级 在Java中Object类是所有类的最终父类,其他所有类都直接或间接的继承了Object类.在Scala中所有类的最终父类为A ...