Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java GUI 设计  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 Re:键盘事件问题 急 [Re:elminsterjimmy]
liangx





发贴: 37
积分: 0
于 2006-11-12 15:09 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
把代码研究了一下。自己做了一些Action和ActionListener的实验,又多了一些理解。不敢独享。
dejinzhao兄的例子是通过一个全局变量来传递,并没有使用原来的action command来传递信息。
只要稍微修改一下我原来的代码就可以实现传递action command的功能。在主类的构造方法中加上

putValue(Action.ACTION_COMMAND_KEY,"action_command");

但是,因为这里使用了主类作为Action对象。因此还是无法区分是哪个事件激发的。至于怎么区分请看我后面的例子。让我们看Action的javadoc,有几个常用属性(我只说1~2个):NAME,ACTION_COMMAND_KEY
我的理解是:Action 一个行动对象,描述了行动的各种属性(包括行动的行为actionPerformed方法),而ActionListener就单纯的只描述了行动的行为(actionPerformed方法)

例如以下的一个实验。为JButton使用setAction方法和用addActionListener方法。得到的效果就完全不同

import java.awt.*;

import javax.swing.*;

/**
* @ActionSample.java
* 2006-11-12
*/

/**
* 例子显示了2个JButton的对象使用了相同的一个Action
* 但是却出现了不同的结果.
*/
public class ActionSample extends JFrame {

  class ActionTest extends AbstractAction{
    ActionTest(){
      putValue(Action.ACTION_COMMAND_KEY,"UseMothedSetAction");
      putValue(Action.NAME,"使用setAction,将会覆盖掉原来的\"Test1\"标题");
    }
    public void actionPerformed(ActionEvent e) {
      System.out.println(e.getActionCommand());
    }
    
  }
  public ActionSample(){
    super("Action例子");
    Action actionTest = new ActionTest();
    JPanel c=(JPanel)getContentPane();
    c.setLayout(new GridLayout(2,1));

    //注意这里.我为btnTest1定义了"Test1"的标题.
    //但是显示出来的结果却不是.
    JButton btnTest1=new JButton("Test1");
    JButton btnTest2=new JButton("Test2");
    btnTest1.setAction(actionTest);
    //这个方法会把actionTest中的action command内容冲
    //掉,用JButton自己的缺省内容代替.
    btnTest2.addActionListener(actionTest);
    c.add(btnTest1);
    c.add(btnTest2);
    
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(400,200);
    setVisible(true);
  }

  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    new ActionSample();

  }

}

==

总结以上,简单的来说(这些都是我个人的理解):
如果组件使用Action来控制行为。我们就必须在Action对象中设置组件的各种属性。
而如果是ActionListener,则有组件自己去设置属性。




Java应用者与<IDE/环境>

话题树型展开
人气 标题 作者 字数 发贴时间
13942 键盘事件问题 急 elminsterjimmy 49 2006-11-01 13:16
12142 Re:键盘事件问题 急 bingjiling1636 126 2006-11-01 22:12
12315 Re:键盘事件问题 急 liangx 18 2006-11-11 17:32
12442 Re:键盘事件问题 急 liangx 1879 2006-11-12 15:09
12753 Re:键盘事件问题 急 lijipeipp 122 2006-11-14 14:12
12056 Re:键盘事件问题 急 guochun 17 2006-11-03 16:56
12131 Re:键盘事件问题 急 bingjiling1636 38 2006-11-03 21:11
12162 Re:键盘事件问题 急 dejinzhao 3652 2006-11-05 23:02
12310 Re:键盘事件问题 急 dejinzhao 75 2006-11-06 07:34
12495 Re:键盘事件问题 急 liangx 51 2006-11-09 16:49
11877 Re:键盘事件问题 急 dejinzhao 111 2006-11-10 09:04
12425 Re:键盘事件问题 急 liangx 1394 2006-11-10 12:16
11847 Re:键盘事件问题 急 dejinzhao 2134 2006-11-11 00:11

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923