java getSource()和 getActionCommand()

本文通过一个简单的开灯关灯示例,介绍了Java中如何使用getSource()和getActionCommand()来区分不同按钮触发的事件,并实现相应的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java getSource()和 getActionCommand()

比如说 按纽的事件,同一个JFrame里可能有多个按钮的事件,为了避免冲突,给每个按钮设置不同的
ActionCommand,在监听时间的时候,用这个做条件区分事件,以做不同的响应
追问
他与getSource有什么区别
回答
getSource()
Returns:
The object on which the Event initially occurred.
依赖于事件对象
getActionCommand()
Returns the command name of the action event fired by this button. If the command name is null (default) then this method returns the label of the button.
依赖于按钮上的字符串
getSource得到的组件的名称,而getActionCommand得到的是标签。
*如:Button bt=new Button(“buttons”);**
用getSource得到的是bt
而用getActionCommand得到的是:buttons
e.getSource() 返回的当前动作所指向的对象,包含对象的所有信息
e.getActionCommand() 返回的是当前动作指向对象的名称

这里附一个开灯的demo

package com.liuyanzhao;
import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
public class Demo2 implements ActionListener {
    JButton button_open ;
    JButton button_close;
    Label label;//这个地方不要用JLable,否则空白符不占位
    Label label2;
    public static void main(String[] args) {
        Demo2 d = new Demo2();
        d.go();
    }
    public void go() {
        JFrame frame = new JFrame();
        frame.setSize(300, 100);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
        JPanel panel = new JPanel();
        frame.add(panel);
        label = new Label("灯状态:");
        label2 = new Label("  ");
        button_open = new JButton("开灯");
        button_close = new JButton("关灯");
        button_open.addActionListener(this);
        button_close.addActionListener(this);
        panel.add(label);
        panel.add(label2);
        panel.add(button_open);
        panel.add(button_close);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        //方法一:getActionCommand
//      if(e.getActionCommand()=="开灯") {
//          label2.setBackground(Color.red);
//          button_open.setEnabled(false);
//          button_close.setEnabled(true);
//      } else if(e.getActionCommand()=="关灯") {
//          label2.setBackground(Color.black);
//          button_close.setEnabled(false);
//          button_open.setEnabled(true);
//      }
        //方法二:getSource
        if(e.getSource()==button_open) {//button_open不要加引号
            label2.setBackground(Color.red);
            button_open.setEnabled(false);
            button_close.setEnabled(true);
        } else if(e.getSource()==button_close) {//button_closen不要加引号
            label2.setBackground(Color.black);
            button_close.setEnabled(false);
            button_open.setEnabled(true);
        }
    }
}

这里要小心,请看注释
本文地址:http://liuyanzhao.com/4051.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值