e.getSource()和e.getActionCommand()的区别

本文详细解释了Java中事件处理机制的两个关键方法:e.getSource()和e.getActionCommand()的区别。e.getSource()用于获取触发事件的组件对象,而e.getActionCommand()则用于获取组件上的字符串标识。

<div class="iteye-blog-content-contain" style="font-size: 14px"></div>

e.getSource()方法依赖于事件对象。比如:JButton jb= new JButton("开始");中的事件对象就是jb。

e.getActionCommand()方法得到的是按钮上的字符串。比如:JButton jb = new JButton("开始");中返回的是字符串"开始"。


总结:用e.getSource()得到的是添加监听器的组件对象,而用e.getActionCommand()得到的是组件对象上的字符串。

 

/**
 * 该代码是为了验证getSource()和getActionCommand()的区别
 * 从程序的运行结果可以看出getSource()获取的是组件对象
 * getActionCommand()获取的是组件上的字符串
 * 具体分析见博客链接:http://1710127116.iteye.com/admin/blogs/2161725
 * 
 */
package 获取按钮对象;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class AtWho extends JFrame {
public void initUi(){
	this.setSize(400, 300);
	this.setLocationRelativeTo(null);
	this.setLayout(new FlowLayout());
	JButton jb=new JButton("ok");
	this.add(jb);
	jb.addActionListener(new ActionListener(){

		@Override
		public void actionPerformed(ActionEvent e) {
			System.out.println("e.getActionCommand():"+e.getActionCommand());
			System.out.println("e.getSource():"+e.getSource());
		}});
	
	this.setDefaultCloseOperation(3);//参数的作用:0:点击关闭按钮对话框不会被关闭;
									//1:点击 关闭按钮对话框被立即关闭,但程序始终在开启状态;
									//2:点击关闭按钮后对话框立即被关闭,但要几秒钟后程序才能结束;
									//3:点击关闭按钮后对话框和程序都立即被关闭;其他数字将会报参数不合法的错误。
	this.setVisible(true);
}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		AtWho aw=new AtWho();
		aw.initUi();
	}

}

 

 程序运行结果:

e.getActionCommand():ok
e.getSource():javax.swing.JButton[,168,5,48x28,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@f8f7db,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=ok,defaultCapable=true]

显然,e.getSource()获取的是按钮对象!

<think>首先,用户的问题是关于Java事件处理中e.getSource()e.getActionCommand()区别。我需要基于提供的引用内容来回答。 回顾引用内容: - 引用[1]: 解释了getSource()返回事件最初发生的对象,而getActionCommand()返回按钮上的字符串或命令名称。例如,Button bt = new Button("buttons"); 时,getSource()返回bt对象,getActionCommand()返回"buttons"。 - 引用[2]: 强调getSource()依赖于事件对象,比如JButton jb = new JButton("开始"); 事件对象是jb。 - 引用[3]: 重申getActionCommand()返回按钮的命令名称,如果为null则返回按钮的标签。 用户的核心需求是理解这两个方法的区别,所以我需要结构化回答,确保清晰。 回答结构: 1. **引言**:简要介绍两个方法在事件处理中的作用。 2. **详细解释**:分别描述getSource()getActionCommand()。 - getSource(): 返回事件源对象。 - getActionCommand(): 返回与事件关联的命令字符串。 3. **关键区别**:使用表格或列表形式对比。 4. **示例**:提供一个简单的Java代码示例来演示。 5. **总结**:强调何时使用哪个方法。 6. **相关问题**:根据系统指令生成相关问题。 系统指令: - 所有行内数学表达式用$...$格式,但这里可能不涉及数学。 - 独立公式用$$...$$,但可能不需要。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 引用的段落末尾添加引用标识,如[^1]。 用户可见层要求: - 回答结构清晰,逐步解决问题。 - 保证真实可靠。 生成相关问题: - 基于主题,如事件处理的其他方面或应用场景。 大纲回答: 1. **介绍**:Java事件处理中,ActionEvent对象提供方法来区分事件源。 2. **getSource()方法**: - 返回事件最初发生的对象。 - 依赖于事件对象本身。 - 示例:如果按钮被点击,返回按钮实例。 3. **getActionCommand()方法**: - 返回命令名称,通常是按钮的标签文本。 - 如果命令名称未设置,则默认返回标签。 - 示例:按钮标签为"Submit",则返回"Submit"。 4. **区别对比**: - getSource()返回对象引用。 - getActionCommand()返回字符串。 - 使用场景:getSource()用于区分不同组件,getActionCommand()用于基于文本处理。 5. **代码示例**:写一个简单Swing程序展示。 6. **总结**:在需要操作对象时用getSource(),在需要文本信息时用getActionCommand()。 7. **相关问题**:生成3个相关问题。 相关问题示例: 1. 如何在Java中设置按钮的ActionCommand? 2. 除了按钮,getActionCommand()还适用于哪些组件? 3. 如何处理多个事件源使用同一个ActionCommand? 引用标识:在回答中引用提供的引用内容,末尾添加[^1]、[^2]等。 最终回答用中文。</think>### Java事件处理中e.getSource()与e.getActionCommand()区别Java事件处理中,当用户触发一个动作事件(如点击按钮)时,会生成一个ActionEvent对象(通常命名为e)。该对象提供两个常用方法:getSource()getActionCommand()。它们的主要区别在于返回值类型使用场景。以下我将逐步解释它们的定义、区别实际应用。 #### 1. **getSource()方法** - **定义**:该方法返回事件最初发生的对象引用。也就是说,它直接指向触发事件的GUI组件(如JButton、JTextField等)的实例。 - **返回值类型**:Object类型(需要强制类型转换为具体组件类)。 - **使用场景**:当需要区分不同组件的事件源时,例如在同一个监听器中处理多个按钮的点击事件。 - **示例说明**:假设有一个按钮`JButton jb = new JButton("开始");`,当点击该按钮时,`e.getSource()`返回的是按钮对象`jb`本身。您可以通过类型转换操作组件属性,如`JButton sourceButton = (JButton) e.getSource();`[^1][^2]。 #### 2. **getActionCommand()方法** - **定义**:该方法返回与事件关联的命令字符串。默认情况下,它返回按钮的标签文本(label),但如果通过`setActionCommand()`方法设置了自定义命令,则返回该命令值。 - **返回值类型**:String类型。 - **使用场景**:当需要基于文本信息处理事件时,例如根据按钮标签执行不同逻辑,或统一处理多个组件的相同命令。 - **示例说明**:对于按钮`JButton jb = new JButton("开始");`,`e.getActionCommand()`默认返回字符串"开始"。如果调用`jb.setActionCommand("start_command");`,则返回"start_command"[^1][^3]。 #### 3. **关键区别对比** 下表总结了两个方法的核心差异: | **特性** | **getSource()** | **getActionCommand()** | |------------------|------------------------------------------|------------------------------------------| | **返回值** | 对象引用(如JButton实例) | 字符串(如按钮标签或自定义命令) | | **依赖关系** | 依赖于事件对象本身 | 依赖于组件的标签或显式设置的命令 | | **典型用途** | 区分不同组件(如多个按钮) | 基于文本区分事件(如相同标签的按钮组) | | **是否需要转换** | 需要强制类型转换(如`(JButton)e.getSource()`) | 无需转换,直接使用字符串 | | **默认行为** | 始终返回事件源对象 | 未设置命令时返回标签文本,否则返回命令值 | #### 4. **代码示例演示** 以下是一个简单的Swing程序,展示两个方法的使用: ```java import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class EventDemo extends JFrame implements ActionListener { public EventDemo() { JButton button1 = new JButton("按钮A"); JButton button2 = new JButton("按钮B"); button2.setActionCommand("custom_command"); // 设置自定义命令 button1.addActionListener(this); button2.addActionListener(this); add(button1); add(button2); setLayout(new FlowLayout()); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } @Override public void actionPerformed(ActionEvent e) { // 使用getSource()区分组件 if (e.getSource() instanceof JButton) { JButton sourceButton = (JButton) e.getSource(); System.out.println("getSource: " + sourceButton.getText()); } // 使用getActionCommand()获取命令字符串 String command = e.getActionCommand(); System.out.println("getActionCommand: " + command); // 示例逻辑:基于命令执行不同操作 if ("custom_command".equals(command)) { System.out.println("自定义命令被触发"); } } public static void main(String[] args) { new EventDemo(); } } ``` - **运行结果**: - 点击按钮A:输出`getSource: 按钮A``getActionCommand: 按钮A`。 - 点击按钮B:输出`getSource: 按钮B``getActionCommand: custom_command`。 #### 5. **总结与使用建议** - **何时使用getSource()**:当需要直接操作或识别事件源组件时(如修改按钮属性),优先使用此方法。例如,在监听器中处理多个不同类型的组件(按钮、文本框等)。 - **何时使用getActionCommand()**:当事件处理逻辑依赖于文本命令时(如国际化应用或统一命令处理),使用此方法更简洁。例如,多个按钮共享相同响应逻辑。 - **关键注意点**:getSource()返回的是对象,需处理类型转换;getActionCommand()默认依赖标签文本,但可通过setActionCommand()覆盖,避免因标签变化导致错误[^1][^3]。 ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值