精华内容
下载资源
问答
  •  本书非常适合Java Web项目开发人员、JavaWeb初学者及编程爱好者使用,同时也可以作为培训机构、大中专院校老师和学生的实践参考用书。 目 录 第1篇 流行组件应用篇 第1章 操作XML文件 1.1 XML基础操作 实例001 ...
  •  本书非常适合Java Web项目开发人员、JavaWeb初学者及编程爱好者使用,同时也可以作为培训机构、大中专院校老师和学生的实践参考用书。 目 录 第1篇 流行组件应用篇 第1章 操作XML文件 1.1 XML基础操作 实例001 ...
  •  本书非常适合Java Web项目开发人员、JavaWeb初学者及编程爱好者使用,同时也可以作为培训机构、大中专院校老师和学生的实践参考用书。 目 录 第1篇 流行组件应用篇 第1章 操作XML文件 1.1 XML基础操作 实例001 ...
  • B) 子类继承父类,那么子类可以重写父类的方法,但是一旦重写父类方法后,无法通过子类访问父类的该方法。 C) 子类继承父类,如果父类中只有一个构造方法并且有参数,那么在子类的构造方法中必须先用super调用父类...
  • 使用的教材是java核心技术卷1,我将跟着这本书的章节同时...在AWT事件模型中实现这些非常容易:将所有事件连接到同一个监听器上。例如,假设blueAction是一个动作监听器,它的actionPerformed方法可以将背景颜色改变...

    使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识。

    day072   事件处理(动作)


    通常,激活一个命令可以有多种方式。用户可以通过菜单、击键或工具栏上的按钮选择特定的功能。在AWT事件模型中实现这些非常容易:将所有事件连接到同一个监听器上。例如,假设blueAction是一个动作监听器,它的actionPerformed方法可以将背景颜色改变成蓝色。将一个监听器对象加到下面几个事件源上:

    •标记为Blue的工具栏按钮

    •标记为Blue的菜单项

    •按键CTRL+B

    然后,无论改变背景颜色的命令是通过哪种方式下达的,是点击按钮、菜单选择,还是按键’其处理都是一样的。

    Swing包提供了一种非常实用的机制来封装命令,并将它们连接到多个事件源,这就是Action接口。一个动作是一个封装下列内容的对象:

    •命令的说明(一个文本字符串和一个可选图标);

    •执行命令所需要的参数(例如,在列举的例子中请求改变的颜色)。

    Action接口包含下列方法:

    void actionPerformed(ActionEvent event)
    void setEnabled(boolean b)
    booleanisEnabled()
    void putValue(String key, Object value)
    Object getValue(String key)
    void addPropertyChangeListener(PropertyChangeListener listener)
    void removePropertyChangeListener(PropertyChangeListener listener)

    第一个方法是ActionListener接口中很熟悉的一个:实际上,Action接口扩展于ActionListener接口,因此,可以在任何需要ActionListener对象的地方使用Action对象。

    接下来的两个方法允许启用或禁用这个动作,并检査这个动作当前是否启用。当一个连接到菜单或工具栏上的动作被禁用时,这个选项就会变成灰色。

    putValue和getvalue方法允许存储和检索动作对象中的任意名/值。有两个重要的预定义字符串:Action.NAME和Action.SMALL_ICON,用于将动作的名字和图标存储到一个动作对象中:

    action.putValue(Action.NAME, "Blue");
    action.putValue(Action.SMALL_ICON, new ImageIcon("blue-ball.gif"));

                      

    如果动作对象添加到菜单或工具栏上,它的名称和图标就会被自动地提取出来,并显示在菜单项或工具栏项中。SHORT_DESCRIPTION值变成了工具提示。

    Action接口的最后两个方法能够让其他对象在动作对象的属性发生变化时得到通告,尤其是菜单或工具栏触发的动作。例如,如果增加一个菜单,作为动作对象的属性变更监听器,而这个动作对象随后被禁用,菜单就会被调用,并将动作名称变为灰色。属性变更监听器是一种常用的构造形式,它是JavaBeans组件模型的一部分。

    需要注意,Action是一个接口,而不是一个类。实现这个接口的所有类都必须实现刚才讨论的7个方法。庆幸的是,有一个类实现了这个接口除actionPerformed方法之外的所有方法,它就是AbstractAction。这个类存储了所有名/值对,并管理着属性变更监听器。我们可以直接扩展AbstractAction类,并在扩展类中实现actionPerformed方法。

    卞面构造一个用于执行改变颜色命令的动作对象。首先存储这个命令的名称、图标和需要的颜色。将颜色存储在AsbstractAction类提供的名/值对表中。下面是ColorAction类的代码。构造器设置名/值对,而actionPerformed方法执行改变颜色的动作。

    public class ColorAction extends AbstractAction
    {
        public ColorAction(String name, Icon icon, Color c)
        {
            putValue(Action.NAME, name);
            putValue(Action.SMALLJCON, icon);
            putValuefcolor", c);
            putValue(Action.SHORT_DESCRIPTION,"Set panel color to " + name.toLowerCase());
        }
    
        public void actionPerformed(ActionEvent event)
        {
            Color c = (Color) getValue("color");
            buttonPanel.setBackground(c);
        }
    }

    在测试程序中,创建了这个类的三个对象,如下所示:

    Action blueAction = new ColorAction("Blue", new IinageIconCblue-ban.gif"), Color.BLUE);

    接下来,将这个动作与一个按钮关联起来。由于JButton有一个用Action对象作为参数的构造器,所以实现这项操作很容易。

    JButton blueButton = new JButton(blueAction);

    构造器读取动作的名称和图标,为工具提示设置简要说明,将动作设置为监听器。

    最后,想要将这个动作对象添加到击键中,以便让用户敲击键盘命令来执行这项动作。为了将动作与击键关联起来,首先需要生成Keystroke类对象。这是一个很有用的类,它封装了对键的说明。要想生成一个Keystroke对象,不要调用构造器,而是调用Keystroke类中的静态getKeyStroke方法:

    Keystroke ctrlBKey = Keystroke.getKeyStroke("Ctrl B");

    为了能够理解下一个步骤,需要知道的概念。用户界面中可以包含许多按钮、菜单、滚动栏以及其他的组件。当用户敲击键盘时,这个动作会被发送给拥有焦点的组件。通常具有焦点的组件可以明显地察觉到(但并不总是这样),例如,在Java观感中,具有焦点的按钮在按钮文本周围有一个细的矩形边框。用户可以使用TAB键在组件之间移动焦点。当按下SPACE键时,就点击了拥有焦点的按钮。还有一些键执行一些其他的动作,例如,按下箭头键可以移动滚动条。

    然而,在这里的示例中,并不希望将击键发送给拥有焦点的组件。否则,每个按钮都需要知道如何处理CTRL+Y、CTRL+B和CTRL+R这些组合键。

    这是一个常见的问题,Swing设计者给出了一种很便捷的解决方案。每个JComponent有三个输入映射(imputmap),每一个映射的Keystroke对象都与动作关联。三个输人映射对应着三个不同的条件。

    按键处理将按照下列顺序检査这些映射:

    1)检查具有输入焦点组件的WHEN_FOCUSED映射。如果这个按键存在,将执行对应的动作。如果动作已启用,则停止处理。

    2)从具有输人焦点的组件开始,检査其父组件的WHEN_ANCESTOR_OF_FOCUSED_COMPONENT映射。一旦找到按键对应的映射,就执行对应的动作。如果动作已启用,将停止处理。

    3)査看具有输人焦点的窗口中的所有可视的和启用的组件,这个按键被注册到WHEN_IN_FOCUSED_WINDOW映射中。给这些组件(按照按键注册的顺序)一个执行对应动作的机会。一旦第一个启用的动作被执行,就停止处理。如果一个按键在多个WHENJN_FOCUSED_WINDOW映射中出现,这部分处理就可能会出现问题。

    可以使用getlnputMap方法从组件中得到输人映射。例如:

    InputMap imap = panel.getInputMap(JComponent.WHEN_FOCUSED);

    WHEN_FOCUSED条件意味着在当前组件拥有键盘焦点时会查看这个映射。在这里的示例中,并不想使用这个映射。是某个按钮拥有输入焦点,而不是面板。其他的两个映射都能够很好地完成增加颜色改变按键的任务。在示例程序中使用的是WHEN_ANCESTOR_OF_F0CUSED_C0MP0NENT。

    InputMap不能直接地将Keystroke对象映射到Action对象。而是先映射到任意对象上,然后由ActionMap类实现将对象映射到动作上的第2个映射。这样很容易实现来自不同输入映射的按键共享一个动作的目的。

    因而,每个组件都可以有三个输人映射和一个动作映射。为了将它们组合起来,需要为动作命名。下面是将键与动作关联起来的方式:

    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)为了能够通过按键触发动作,必须额外地执行几步操作。首先定位顶层窗口组件,例如,包含所有其他组件的面板。

    5)然后,得到顶层组件的WHEN_ANCESTOR_OF_FOCUS_COMPONENT输入映射。为需要的按键创建一个KeyStrike对象。创建一个描述动作字符串这样的动作键对象。将(按键,动作键)对添加到输人映射中。

    6)最后,得到顶层组件的动作映射。将(动作键,动作对象)添加到映射中。

    下面的程序给出了将按钮和按键映射到动作对象的完整程序代码。试试看,点击按钮或按下CTRL+Y、CTRL+B或CTRL+R来改变面板颜色。(没有找到合适的照片随便放了几张照片)

    /**
     *@author  zzehao
     */
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public 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();
    
    		//define actions
    		Action yellowAction = new ColorAction("Yellow", new ImageIcon("yellow-ball.gif"),Color.YELLOW);
    		Action blueAction = new ColorAction("Blue", new ImageIcon("blue-ball.gif"), Color.BLUE);
    		Action redAction = new ColorAction("Red", new ImageIcon("red-ball.gif") ,Color.RED);
    
    		//add buttons for these actions
    		buttonPanel.add(new JButton(yellowAction));
    		buttonPanel.add(new JButton(blueAction));
    		buttonPanel.add(new JButton(redAction));
    
    		//add panel to frame
    		add(buttonPanel);
    
    		//associate the Y, B, and R keys with names
    		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");
    
    		//associate the names with actions
    		ActionMap amap = buttonPanel.getActionMap();
    		amap.put("panel.yellow", yellowAction);
    		amap.put("panel.blue", blueAction);
    		amap.put("panel.red",redAction);
    	}
    
    	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 panel color to "+name.toLowerCase());
    			putValue("color", c);
    		}
    
    		public void actionPerformed(ActionEvent event)
    		{
    			Color c =(Color) getValue("color");
    			buttonPanel.setBackground(c);
    		}
    	}
    
    	public static void main(String[] args)
    	{
    		ActionFrame frame = new ActionFrame();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
    	}
    }
    

    运行的结果如下:


     

    展开全文
  • Boolean Action可被用作代理动作,从添加Unity Button Action组件的场景开始,我们将把动作功能移动代理动作,然后将按钮按下动作和键盘动作链接这个新创建的代理动作。这会将我们的输出功能移统一位置,并...

    前言

    有时希望让许多不同的输入动作都具有相同的结果。

    虽然可以将所有操作中的相同事件连接起来以具有相同的输出,但是这可能变得麻烦且难以维护。
    Boolean Action可被用作代理动作,从添加Unity Button Action组件的场景开始,我们将把动作功能移动到代理动作,然后将按钮按下动作和键盘动作链接到这个新创建的代理动作。这会将我们的输出功能移到统一位置,并允许我们从许多不同的动作中调用它。

    第1步

    在Unity层次结构中创建一个空物体并将其重命名为FloorToggler,单击Add Component并选择Boolean Action组件。
    新创建Boolean Action的动作将定义我们如何切换Floor物体活动状态。
    在这里插入图片描述

    第2步

    单击组件中Activated事件参数右下角的+符号,然后将Floor 拖放到显示框中。在这里插入图片描述
    选择一个Function在Activated事件发出时执行。对于此示例,请选择GameObject -> SetActive(bool)(请确保不要Dynamic bool - SetActive为此示例选择)。
    在这里插入图片描述

    第3步

    与步骤2相同,只是要对Boolean Action组件中的Deactivated事件参数进行操作,但请选中该GameObject.SetActive功能下的复选框。
    在这里插入图片描述

    第4步

    现在,我们有了一个Boolen Action,它将在Action接收true到时禁用Floor,并在Action接收到false时重新启用Floor。
    我们可以连接Unity Button Action的 Value Changed事件,在FloorToggler物体Boolean Action组件上调用Receive方法,并且只要值发生变化,它将把Unity Button Action状态传递给Boolean Action。但是,这样做意味着对于每个输入操作,我们都需要连接它们的Value Changed事件以指向BooleanAction组件上的Receive方法。这又会变得非常麻烦且难以维护,因此我们将使用Zinnia.Action上可用的Sources参数。
    该Sources参数允许我们指定其他操作,Boolean Action以监视更改并重新发出在这些源操作上发生的任何事件。
    展开Sources参数,然后在Size参数字段中输入所需的其他操作进行监视。在这个例子中,我们想观看其他两个动作(菜单键Unity Button Action和空格键Unity Button Action),所以将这两个动作到Sizes参数字段中。
    在这里插入图片描述

    第5步

    将UnityXR.OpenVR.RightController -> MenuButton -> Press[0]物体拖放到FloorToggler物体BooleanAction组件Sources -> Size -> Element 0上的插槽中。
    拖放包含Unity Button Action组件Key Code参数设置为Space的游戏对象到Boolean Action组件Sources -> Size -> Element 1的插槽上。
    在这里插入图片描述

    第6步

    由于它们的Unity Button Action已链接到FloorToggler物体Boolean Action组件,因此我们现在不再需要对这些组件执行这些动作。因此,让我们从其他Unity Button Action组件中删除事件。
    选择UnityXR.OpenVR.RightController -> MenuButton -> Press[0]物体,然后单击Unity Button Action组件Activated事件和Deactivated事件参数右下角的-符号,删除这些事件侦听器。使此Unity Button Action组件除了侦听Menu Button上的按钮按下之外,仅执行其他操作。
    在这里插入图片描述
    让我们对GameObject的Unity Button Action的组件执行相同的操作。在这里插入图片描述

    结语

    现在,场景中有一个已定义的动作,用于控制Floor物体的活动状态,我们还连接了另外两个动作,这些动作用于侦听“菜单按钮”和“空格键”的输入,以执行切换地面状态的输出动作。 。
    创建代理操作然后链接其他操作的能力使基于多个不同输入操作来驱动单个输出操作成为可能。
    播放Unity场景,您将可以按右控制器上的“菜单”按钮使Floor物体消失,或者您可以按Space键也使Floor 物体消失。

    注:本文内容引用自VRTK学院。用于自己学习笔记,文章如有描述不当的地方,也欢迎各位朋友在评论处留言指正,感谢大家支持。

    展开全文
  • 数据库课程设计(基于B/S)

    热门讨论 2008-12-28 15:28:06
    (6)系统维护功能:数据的安全管理,主要是依靠管理员对数据库里的信息进行备份和恢复,数据库备份后,如果出了什么意外可以恢复数据库当时备份的状态,这提高了系统和数据的安全性,有利于系统的维护。...
  • 8.1.5 可以保存设置的Activity:PreferenceActivity 234 8.2 文件存储 238 8.2.1 openFileOutput和openFileInput方法 238 8.2.2 读写SD卡中的文件 239 8.2.3 SAX引擎读取XML文件的原理 241 8.2.4 将XML...
  • 完成一个简单功能:用一个按钮来控制字符串显示控件的显示与否,按下时显示,不按下时隐藏。 利用属性节点实现,在程序框图中右键单击字符串显示...连接按钮输出属性节点输入,就可以实现用按钮控制文本显示与否。

    完成一个简单功能:用一个按钮来控制字符串显示控件的显示与否,按下时显示,不按下时隐藏。

    利用属性节点实现,在程序框图中右键单击字符串显示控件,选择"创建"->"属性节点"->"可见",创建字符串显示控件的Visible属性节点。


    右键该属性节点,选择“全部转换为写入”。添加一个按钮,机械动作设为“触发时转换”。连接按钮输出到属性节点输入,就可以实现用按钮控制文本显示与否。


    展开全文
  • Java图形设计(四)

    2018-02-21 20:19:35
    上一篇博客我们探讨 Java AWT 事件模型的工作机制,那么接下来探讨如何以更加结构化的方式处理动作(actions)事件。...在 AWT 事件模型中实现这些非常容易:将所有事件连接到同一个监听器上。例如,假设 blu...

    上一篇博客我们探讨 Java AWT 事件模型的工作机制,那么接下来探讨如何以更加结构化的方式处理动作(actions)事件。《Java核心技术》这本书已经给了详细的讨论,我们要做的就是像以前一样把它压缩、化简和提炼。

    通常,激活一个命令可以有多种方式。用户可以通过菜单、击键或工具栏上的按钮选择特定的功能。在 AWT 事件模型中实现这些非常容易:将所有事件连接到同一个监听器上。例如,假设 blueAction 是一个动作监听器,它的 actionPerformed 方法可以将背景颜色改成蓝色。将一个监听器对象加到下面几个事件源上:

    • 标记为 Blue 的工具栏按钮
    • 标记为 Blue 的菜单项
    • 按键 CTRL+B

    然后,无论改变背景颜色的命令是通过哪种方式下达的,是点击按钮、菜单选择,还是按键,其处理都是一样的。

    swing 包提供了一种非常实用的机制来封装命令,并将它们连接到多个事件源,这就是 Action 接口。一个动作是一个封装下列内容的对象:

    • 命令的说明(一个文本字符串和一个可选图标);
    • 执行命令所需的参数(例如,在列举的例子中请求改变的颜色)。

    Action 接口包含下列方法:

    void actionPerformed(ActionEvent event)
    void setEnabled(boolean b)
    boolean isEnabled()
    void putValue(String key, Object value)
    Object getValue(String key)
    void addPropertyChangeListener(PropertyChangeListener listener)
    void removePropertyChangeListener(PropertyChangeListener listener)

    第一个方法是 ActionListener 接口中很熟悉的一个:实际上,Action 接口扩展于 ActionListener 接口,因此,可以在任何需要 ActionListener 对象的地方使用 Action 对象。

    接下来的两个方法允许启动或禁用这个动作,并检查这个动作当前是否启用。当一个连接到菜单或工具栏上的动作被禁用时,这个选项就会变成灰色。

    putValue 和 getValue 方法允许存储和检索动作对象中的任意名/值。有两个重要的预定义字符串:Action.NAME 和 Action.SMALL_ICON,用于将动作的名字和图标存储到一个动作对象中:

    action.putValue(Action.NAME, "Blue");
    action.putValue(Action.SMALL_ICON, new ImageIcon("blue-ball.gif"));

    下表给出了所有预定义的动作表名称。

    名称
    NAME 动作名称,显示在按钮和菜单上
    SMALL_ICON 存储小图标的地方;显示在按钮、菜单栏和工具栏中
    SHORT_DESCRIPTION 图标的简要说明;显示在工具提示中
    LONG_DESCRIPTION 图标的详细说明;使用在在线帮助中。没有 Swing 组件使用这个值
    MNEMONIC_KEY 快捷键缩写;显示在菜单项中。
    ACCELERATOR_KEY 存储加速击键的地方;Swing 组件不使用这个值
    ACTION_COMMAND_KEY 历史遗留;仅在旧版本的 registerKeyboardAction 方法中使用
    DEFAULT 可能有用的综合属性;Swing 组件不使用这个值

    如果动作对象添加到菜单或工具栏上,它的名称和图标就会被自动地提取出来,并显示在菜单项和工具栏项中。SHORT_DESCRIPTION 值变成了工具提示。

    Action 接口的最后两个方法能够让其他对象在动作对象的属性发生变化时得到通告,尤其是菜单或工具栏出发的动作。例如,如果增加一个菜单,作为动作对象的属性变更监听器,而这个动作对象随后被禁用,菜单就会被调用,并将动作名称变为灰色。

    需要注意,Action 是一个接口,而不是一个类。实现这个接口的所有类都必须实现刚才讨论的 7 个 方法。庆幸的是,有一个类实现了这个接口除 actionPerformed 方法之外的所有方法,它就是 AbstractAction 。这个类存储了所有名/值对,并管理着属性变更监听器。我们可以 直接扩展 AbstractAction 类,并在扩展类中实现 actionPerformed 方法。

    下面构造一个用于执行改变颜色命令的动作对象。首先存储这个命令的名称、图标和需要的颜色。将颜色存储在 AbstractAction 类提供的名/值对表中。下面是 ColorAction 类的代码。构造器设置名/值对,而 actionPerformed 方法执行改变颜色的动作。

    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 panel color to " + name.toLowerCase());
            putValue("Color",c);
        }
    
        public void actionPerformend(ActionEvent event) {
            Color c = (Color)getValue("color");
            buttonPanel.setBackground(c);
        }
    }

    在测试程序中,创建了这个类的三个对象,如下所示:

    Action blueAction = new ColorAction("Blue", new ImageIcon("blue-ball.gif"),Color.BLUE);

    接下来,将这个动作与一个按钮关联起来。由于JButton 有一个用 Action 对象作为参数的构造器,所以实现这项操作很容易。

    JButton blueButton = new JButton(blueAction);

    构造器读取动作的名称和图标,为工具提示设置简要说明,将动作设置为监听器。

    有关映射不想讨论了,贼鸡儿难,没完全看懂,更记不住。

    下面总结一下用同一个动作响应按钮、菜单项或按键的方式:

    1. 实现一个扩展于 AbstractAction 类的类。多个相关的动作可以使用同一个类。
    2. 构造一个动作类对象。
    3. 使用动作对象创建按钮或菜单项。构造器将从动作对象中读取标签文本和图标。
    4. 为了能够通过按键触发动作,必须额外地执行几个步骤。首先定位顶层窗口组件,例如,包含所有其他组件的面板。
    5. 然后,得到顶层组件的 WHEN_ANCESTOR_OF_FOCUS_COMPONENT 输入映射。为需要的按键创建一个 KeyStrike 对象。创建一个描述动作字符串这样的动作键对象。将(按键,动作键)对添加到输入映射中。
    6. 随后,得到顶层组件的动作映射。将(动作键,动作对象)添加到映射中。

      下面程序给出了将按钮和按键映射到动作对象的完整代码。试试看,点击按钮或按下 CTRL+Y、CTRL+B或CTRL+R来改变面板颜色。

    ActionFrame.java

    package action;
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public 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.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);
    
            //用Action对象构造按钮,把动作和按钮关联起来
            buttonPanel.add(new JButton(yellowAction));
            buttonPanel.add(new JButton(blueAction));
            buttonPanel.add(new JButton(redAction));
            add(buttonPanel);
    
            //得到顶层组件的WHEN_ANCESTOR_OF_FOCUSED_COMPONENT输入映射
            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.bule");
            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);
        }
    
        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 panel color to "+name.toLowerCase());//显示在工具提示里
                putValue("color", c);
            }
    
            public void actionPerformed(ActionEvent arg0) {
                Color c=(Color) getValue("color");
                buttonPanel.setBackground(c);
            }
    
        }
    
    }

    ActionFrameTest.java

    package action;
    
    import java.awt.*;
    import javax.swing.*;
    
    public class ActionFrameTest {
        public static void main(String[] args) {
            EventQueue.invokeLater(() -> {
                JFrame frame = new ActionFrame();
                frame.setTitle("ActionFrame");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            });
        }
    
    }
    

    展开全文
  • 8.1.5 可以保存设置的Activity:PreferenceActivity 234 8.2 文件存储 238 8.2.1 openFileOutput和openFileInput方法 238 8.2.2 读写SD卡中的文件 239 8.2.3 SAX引擎读取XML文件的原理 241 8.2.4 将XML...
  • 拷贝完成后点击“显示列表”按钮可以查看拷贝内容及错误文件、目录信息。 软件对于拷贝和删除小文件或文件夹来讲,可能就有点大材小用了。对于大型的文件和文件夹就不同了,它能非常迅速的完成要拷贝的内容,通过...
  • //连接到服务器 ftpClient.login(user,pass); //在服务器上注册 InputStream is=ftpClient.list(); //得到服务器目录与文件列表输入流 StringBuffer info=new StringBuffer(); //实例化StringBuffer对象,用于输出...
  • //连接到服务器 ftpClient.login(user,pass); //在服务器上注册 InputStream is=ftpClient.list(); //得到服务器目录与文件列表输入流 StringBuffer info=new StringBuffer(); //实例化StringBuffer对象,用于输出...
  • 提供具有交互功能的按钮按钮动作支持跳转帧和跳转节等功能,可以为包含多个节的教程制作封面选单。音乐对象可以辅助按钮达到更好的多媒体效果。 6.可以在帧上实现图形对象的飞入等渐变动画。 7.可以使用项目...
  • 提供具有交互功能的按钮按钮动作支持跳转帧和跳转节等功能,可以为包含多个节的教程制作封面选单。音乐对象可以辅助按钮达到更好的多媒体效果。 6.可以在帧上实现图形对象的飞入等渐变动画。 7.可以使用项目...
  • 20.1节连接到外部URL 20.2节使用FlashVars 20.3节在Flex里面调用JavaScript函数方法 20.4节在JavaScript中调用ActionScript方法函数 20.5节经由BrowserManager改变HTML页面标题 20.6节BrowserManager解析URL 20.7节...
  • 按动Object Inspector下端的“Events”页标签,使得Events页可见,这一定的事件后边的空白处,可以定义对象接受相应事件时执行的动作。首次启动时,Object Inspector窗口显示的是当前窗体Form1的属性。Object ...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    2.5.7 移动Clear Log按钮 43 2.5.8 启用Zombie 44 2.6 内存管理 45 2.6.1 泄漏 45 2.6.2 缓存 45 2.7 秘诀:使用Instruments检测内存泄漏 46 2.8 秘诀:使用Instruments监视缓存对象的内存分配 48 2.9 使用...
  • iPhone开发秘籍(第2版)--详细书签版

    热门讨论 2012-12-11 13:42:25
    2.5.7 移动Clear Log按钮 43 2.5.8 启用Zombie 44 2.6 内存管理 45 2.6.1 泄漏 45 2.6.2 缓存 45 2.7 秘诀:使用Instruments检测内存泄漏 46 2.8 秘诀:使用Instruments监视缓存对象的内存分配 48 2.9 使用...
  • 提供具有交互功能的按钮按钮动作支持跳转帧和跳转节等功能,可以为包含多个节的教程制作封面选单。音乐对象可以辅助按钮达到更好的多媒体效果。 6.可以在帧上实现图形对象的飞入等渐变动画。 7.可以使用项目...
  • 提供具有交互功能的按钮按钮动作支持跳转帧和跳转节等功能,可以为包含多个节的教程制作封面选单。音乐对象可以辅助按钮达到更好的多媒体效果。 6.可以在帧上实现图形对象的飞入等渐变动画。 7.可以使用项目...
  • 提供具有交互功能的按钮按钮动作支持跳转帧和跳转节等功能,可以为包含多个节的教程制作封面选单。音乐对象可以辅助按钮达到更好的多媒体效果。 6.可以在帧上实现图形对象的飞入等渐变动画。 7.可以使用项目...
  •  Web Developer扩展包,您可以访问其他的开发者工具,例如验证选项,页面尺寸调整和CSS要素浏览器:所有功能都可以从工具栏中一个额外的按钮进入。  Chrome Editor是您不能错过的。它可以让您在浏览器中轻松编码,...
  • * 极速模式直接打开某些 FTP 下载链接时, 会提示无法连接到网站. [资源嗅探器] * 有时修改语言会导致嗅探器中的资源列表消失. [数据同步] * 不编辑过滤规则点击 "应用" 时, 会错误的进行同步. [阅读模式] * 已经...
  • 通过VBS语言对按钮对象编辑一个脚本程序就可以方便地实现此功能,这里我们给“查询”按钮的事件属性——“鼠标动作”中添加VBS脚本。 1、定义连接字符串   我们是可以通过ODBC方便地访问数据库
  • 程序描述:使用Windows系统的用户在关机的时候,出现的界面只允许用户选择关机、注销或取消动作,而桌面上的程序都不能使用,并且屏幕呈现灰色状态。本章将实现如何在网页中windows关机效果 源码结构说明 1....
  • 3.3.3 将操作和输出口添加视图控制器 24 3.3.4 将操作和输出口添加实现文件 26 3.4 使用应用程序委托 30 3.5 编辑MainWindow.xib 33 3.6 编辑Button_FunViewController.xib 34 3.6.1 在Interface Builder...
  • java.sql.SQLException错误

    2010-10-28 18:38:13
    //把各个按钮就加入jp2 jp2.add(jb2); jp2.add(jb3); jp2.add(jb4); /*//rowData可以存放多行 Vector hang=new Vector(); hang.add("sp001"); hang.add("孙悟空"); hang.add(...
  • 动作捕捉技术应用

    千次阅读 2018-06-15 12:55:55
    (1) 首先你要点击图(2)中的第二个按钮connect,如果你的连接线已经插电脑了,你会看到图(3),然后点connect。(第三个按钮可以选择休眠还是断开连接。如果是休眠,蓝色灯不会关掉,再次连接的时候不用一...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 165
精华内容 66
关键字:

)动作按钮可以连接到(