繁体   English   中英

getSource()和getActionCommand()

[英]the getSource() and getActionCommand()

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

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

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

假设您正在讨论ActionEvent类,那么这两种方法之间存在很大差异。

getActionCommand()为您提供表示操作命令的String。 该值是特定于组件的; 对于JButton您可以选择使用setActionCommand(String command)设置值,但是对于JTextField如果不设置它,它将自动为您提供文本字段的值。 根据javadoc,这与java.awt.TextField兼容性。

getSource()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);
  }

}

getActionCommand()

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

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

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

getSource()

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

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

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

我使用getActionCommand()来听按钮。 我将setActionCommand()应用于每个按钮,以便每当使用event.getActionCommand执行事件时都能听到(“按钮的setActionCommand()值”)。

例如,我为JRadioButtons使用getSource()。 我编写了返回每个JRadioButton的方法,所以在我的Listener类中,我可以在每次按下新的JRadioButton时指定一个动作。 例如:

public class SeleccionListener implements ActionListener, FocusListener {}

因此,我可以听到按钮事件和radioButtons事件。 以下是我如何倾听每一个的例子:

public void actionPerformed(ActionEvent event) {
    if (event.getActionCommand().equals(GUISeleccion.BOTON_ACEPTAR)) {
        System.out.println("Aceptar pressed");
    }

在这种情况下,GUISeleccion.BOTON_ACEPTAR是一个“public static final String”,用于JButtonAceptar.setActionCommand(BOTON_ACEPTAR)。

public void focusGained(FocusEvent focusEvent) {
    if (focusEvent.getSource().equals(guiSeleccion.getJrbDat())){
        System.out.println("Data radio button");
    }

在这一个中,我得到了当用户点击它时聚焦的任何JRadioButton的源代码。 guiSeleccion.getJrbDat()返回对GUISeleccion类中的JRadioButton的引用(这是一个Frame)

getActionCommand()方法通过setActionCommand()返回与该Component集关联的String,而getSource()方法返回Object类的Object,指定事件的源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM