Swing——动作(Action)

本文是在学习中的总结,欢迎转载但请注明出处: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);
	}
}
时间: 2024-10-11 15:04:08

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

cocos2d-x3.3 源码分析之-动作Action和ActionManager

写这篇文章,没有花我多少时间.但是由于我的笔记写在云笔记中,图片也多.csdn也不支持直接复制粘贴图片,可以说把笔记移植过来比我当初写还要费事,希望改进吧 从入口开始分析,我们来看看addaction函数,他接受一个动作,并绑定自己,是否暂停取决于节点的running属性. 我们来具体看看ActionManager这个类 class CC_DLLActionManager : public Ref { public: ActionManager(void); ~ActionManager(voi

创建一个动作-Action类:

让我们创建一个Java文件HelloWorldAction.java的Java资源> SRC下一个的包名com.yiibai.struts2与下面的内容. package com.yiibai.struts2; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport{ private String name; public String execute()

zabbix------定义触发器trigger与动作action

1 一个完善的监控系统需要一定的告警机制,什么时候告警需要触发器,怎么告警,在什么情况下如何告警取决于action 2 定义trigger 我是确定最近3秒传送流量大于50M的时候NIC.trigger.transfer状态转变为warning 3 定义action,也即当trigger状态变化后,就执行该任务 确定action的名称 然后修改情况,什么条件会触发这个action,满足trigger状态为problem 然后设置操作,比如发送邮件给系统用户的liuliancao 这是后去下载一个

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

因为回答百度知道的一个问题,仔细查看了<Struts2 In Action>,深入细致的看了 “数据转移OGNL 和 构建视图-标签”,很多东西才恍然大悟. 一直觉得国外写的书很浮,不具有操作性,但其实,Coding多了,才发现国外的书写的深刻.清晰.能传道解惑. 一.主要收获 1. Struts2 框架的数据流入和流出 使用 Struts2 标签时,所有非字符串属性都被当作 OGNL表达式进行解析. 使用  %{expression} 语法可以强制将字符串属性当作 OGNL表达式解析. 2.

Ngui动作系统(Action)

动作(Action)系统简介 什么是动作呢?顾名思义它是管理运行环境中所有动作的中枢,通俗点讲就是动画.它也是总个框架核心组件之一,它提供动作的创建.删除.插入,以及提供对关键帧与过渡的诸多操作.关键帧的过渡可以使用三次贝塞尔曲线,或内置的曲线 linear/ease/ease_in/ease_out/ease_in_out,这也和大多数主流框架以及游戏引擎类似. 动作是什么原理 动作怎么驱动视图进行流畅运动的呢?其实原理很简单,我们可以把动作系统看做一个独立的系统与视图或渲染完全不相关.它们之

Cocos2d-x 动作的管理之ActionManger

前面讲过Node的动作(Action),cocos2d-x中,提供了一个ActionManger,用于管理Action的一些动作,比如停止,暂停等:一.停止所有动作实际上,Node节点已经有了一些简单的动作的管理,比如停止Node实例上的所有动作: node->stopAllActions(); // node->runAction(ScaleTo::create(2, 2)) 调用node->stopAllActions(); 之前的所有动作都将停止,但是,它并影响后续的动作,后续的S

action中请求参数获取的两种方式

action中请求参数获取的两种方式 1.属性驱动? a.直接在 action 类中提供与请求参数匹配属性,提供 get/set 方法? b.在 action 类中创始一个 javaBean,对其提供 get/set ,在请求时页面上要进行修改,? 例如 user.username user.password ,要使用 ognl 表达式? 以上两种方式的优缺点:? 第一种比较简单,在实际操作我们需要将 action 的属性在赋值给模型(javaBean)去操作? 第二种:不需要在直接将值给 ja

cocos2dx层精灵、以及精灵的动画与动作

层 精灵 精灵不一定是静态的.通常,一个精灵可以不断变化,变化的方式包括:移动.旋转.缩放.变形.显现消失.动画效果 (类似 GIF 动画)等.精灵按照层次结构组合起来,并与玩家互动,构成了一个完整的游戏. 从绘图的角度来说,图形按照自上而下的顺序绘 制出来.为了绘制场景,需要绘制场景中的层,为了绘制层,需要绘制层中的精灵.因此,关系图实质上安排了图元的绘 图方式,关系图中的每一个元素称作节点(node),关系图则称作渲染树(rendering tree).渲染场景的过程就是遍历 渲染树的过程.

zabbix之3触发器/action及模板

1.触发器: {server_name:item_name.func.operator.condition} 一旦condition(条件)触发,则item状态改变 触发器之间可以存在依赖关系,即itemA触发,则itemB也触发. 2.动作action action是触发器触发后,应该采取的动作. 其中动作除了可以详细设定执行的动作(如发邮件,重启服务)外,还可以设定触发的第二条件,如维护期间不执行,仅为触发器的执行. 最重要的是动作可以升级,如动作执行多少次后,触发器依然没有恢复,则执行下一