getSource()和getActionCommand()

use*_*206 18 java user-interface swing action event-handling

什么是getSource?它返回了什么?

什么是getActionCommand()以及它返回什么?

我对这两个人之间的困惑可以让任何人给予我或将它们区分给我吗?在UI中使用getSource和getActionCommand()有什么用?特别是TextField还是JTextField?

Qwe*_*rky 19

假设你在谈论ActionEvent课程,那么这两种方法之间存在很大差异.

getActionCommand()给你一个表示动作命令的String.该值是特定于组件的; 对于a,JButton您可以选择设置值,setActionCommand(String command)JTextField如果您没有设置它,它将自动为您提供文本字段的值.根据javadoc,这是为了兼容性java.awt.TextField.

getSource()由(via )的子EventObject类指定.这为您提供了事件来自的对象的引用.ActionEventjava.awt.AWTEvent

编辑:

这是一个例子.有两个字段,一个有明确设置的动作命令,另一个没有.在每个中键入一些文本,然后按Enter键.

public class Events implements ActionListener {

  private static JFrame frame; 

  public static void main(String[] args) {

    frame = new JFrame("JTextField events");
    frame.getContentPane().setLayout(new FlowLayout());

    JTextField field1 = new JTextField(10);
    field1.addActionListener(new Events());
    frame.getContentPane().add(new JLabel("Field with no action command set"));
    frame.getContentPane().add(field1);

    JTextField field2 = new JTextField(10);
    field2.addActionListener(new Events());
    field2.setActionCommand("my action command");
    frame.getContentPane().add(new JLabel("Field with an action command set"));
    frame.getContentPane().add(field2);


    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(220, 150);
    frame.setResizable(false);
    frame.setVisible(true);
  }

  @Override
  public void actionPerformed(ActionEvent evt) {
    String cmd = evt.getActionCommand();
    JOptionPane.showMessageDialog(frame, "Command: " + cmd);
  }

}
Run Code Online (Sandbox Code Playgroud)


Bhe*_*ung 9

getActionCommand()

返回与此操作关联的命令字符串.此字符串允许"模态"组件根据其状态指定多个命令之一.例如,单个按钮可能会在"显示详细信息"和"隐藏详细信息"之间切换.源对象和事件在每种情况下都是相同的,但命令字符串将标识预期的操作.

IMO,如果您使用单个命令组件根据其状态触发不同的命令,这非常有用,并且使用此方法,您的处理程序可以执行正确的代码行.

JTextField具有JTextField#setActionCommand(java.lang.String)可用于设置用于由其生成的操作事件的命令字符串的方法.

getSource()

返回:最初发生事件的对象.

我们可以getSource()用来识别组件并在动作监听器中执行相应的代码行.因此,我们不需要为每个命令组件编写单独的动作侦听器.由于您具有对组件本身的引用,因此您可以根据事件对组件进行任何更改.

如果事件是由当时生成的,JTextField那么ActionEvent#getSource()将为您提供对JTextField实例本身的引用.