一尘不染

getSource()和getActionCommand()

java

什么是getSource?它返回什么?

什么是getActionCommand(),返回什么?

我对这两者感到困惑,谁能给我与众不同?UI中的getSource和getActionCommand()有什么用?特别是TextField或JTextField?


阅读 219

收藏
2020-12-03

共1个答案

一尘不染

假设您在谈论ActionEvent类,那么这两种方法之间会有很大的不同。

getActionCommand()
给您一个代表动作命令的字符串。该值是特定于组件的;对于a,JButton您可以选择使用来设置值,setActionCommand(String command)对于a,JTextField如果您未设置此值,它将自动为您提供文本字段的值。根据javadoc,这是为了与兼容java.awt.TextField

getSource() 由(via
)的子EventObject类指定。这为您提供了事件来源的参考。ActionEvent``java.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);
  }

}
2020-12-03