the getSource() and getActionCommand()



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

和什么是getActionCommand()和它返回什么??

我在这两者之间感到困惑,有人能给我或区分它们吗?什么是使用getSource和getActionCommand()在UI的?具体是TextField还是JTextField?

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

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

getSource() EventObject类指定,ActionEventjava.awt.AWTEvent的子类。这将为您提供对事件来源对象的引用。

编辑:

下面是一个例子。有两个字段,一个有显式设置的操作命令,另一个没有。输入一些文本,然后按回车键。

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()

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

IMO,如果你让一个命令组件根据它的状态触发不同的命令,使用这个方法你的处理程序可以执行正确的代码行,这是很有用的。

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

getSource()

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

我们可以使用getSource()来识别组件,并在操作侦听器中执行相应的代码行。因此,我们不需要为每个命令组件编写单独的操作侦听器。因为你有对组件本身的引用,如果你需要对该事件的结果对组件进行任何更改,你就可以。

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

我使用getActionCommand()来收听按钮。我将setActionCommand()应用于每个按钮,这样我就可以听到事件何时使用event执行。getActionCommand("按钮的setActionCommand()值").

例如,我对JRadioButtons使用getSource()。我编写了返回每个JRadioButton的方法,因此在我的Listener Class中,我可以在每次按下一个新的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");
    }

在本例中为guisselection。BOTON_ACEPTAR是一个"公共静态最终字符串",在jbuttonacceptar . setactioncommand (BOTON_ACEPTAR)中使用。

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

在这个示例中,我获得了当用户点击它时聚焦的任何JRadioButton的源。getjrbdat()返回对类guisselection(这是一个Frame)中的JRadioButton的引用

getActionCommand()方法返回与通过setActionCommand()设置的组件相关联的String,而getSource()方法返回Object类的Object,指定事件的来源。

相关内容

  • 没有找到相关文章

最新更新