Подтвердить что ты не робот

GetSource() и getActionCommand()

Что такое getSource? и что он возвращает?

и что такое getActionCommand() и что он возвращает?

Я смущаюсь между этими двумя, кто может дать или отличить их от меня? что использование getSource и getActionCommand() в пользовательском интерфейсе? в частности TextField или JTextField?

4b9b3361

Ответ 1

Предполагая, что вы говорите о ActionEvent, тогда существует большая разница между этими двумя методами.

getActionCommand() предоставляет строку, представляющую команду действия. Значение является специфичным для компонента; для JButton у вас есть возможность установить значение с помощью setActionCommand(String command), но для JTextField, если вы не установите это, оно автоматически даст вам значение текстового поля. Согласно javadoc это для совместимости с java.awt.TextField.

getSource() указан классом EventObject, который ActionEvent является дочерним элементом (через java.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);
  }

}

Ответ 2

getActionCommand()

Возвращает командную строку, связанную с этим действием. Эта строка позволяет "модальному" компоненту указать одну из нескольких команд в зависимости от ее состояния. Например, одна кнопка может переключаться между "показать детали" и "скрывать детали". Исходный объект и событие будут одинаковыми в каждом случае, но командная строка идентифицирует предполагаемое действие.

IMO, это полезно, если вы используете один командный компонент для запуска различных команд на основе этого состояния, и используя этот метод, ваш обработчик может выполнять правильные строки кода.

JTextField имеет метод JTextField#setActionCommand(java.lang.String), который можно использовать для установки командной строки, используемой для генерируемых ею событий действий.

getSource()

Возвращает: Объект, с которого первоначально произошло событие.

Мы можем использовать getSource() для идентификации компонента и выполнения соответствующих строк кода внутри action-listener. Таким образом, нам не нужно писать отдельный исполнитель событий для каждого командного компонента. И поскольку у вас есть ссылка на сам компонент, вы можете, если вам нужно внести какие-либо изменения в компонент в результате события.

Если событие было создано JTextField, тогда ActionEvent#getSource() предоставит вам ссылку на экземпляр JTextField.

Ответ 3

Я использую getActionCommand() для прослушивания кнопок. Я применяю setActionCommand() к каждой кнопке, чтобы я мог слышать всякий раз, когда событие выполняется с event.getActionCommand( "Значение SetActionCommand() кнопки" ).

Я использую getSource() для JRadioButtons, например. Я пишу методы, которые возвращают каждый JRadioButton, поэтому в моем классе прослушивателя я могу указать действие каждый раз при нажатии нового 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 является "общественности статической окончательным Строка", которая используется в JButtonAceptar.setActionCommand(BOTON_ACEPTAR).

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

В этом я получаю источник любого JRadioButton, который фокусируется, когда пользователь нажимает на него. guiSeleccion.getJrbDat() возвращает ссылку на JRadioButton, которая находится в классе GUISeleccion (это кадр)

Ответ 4

Метод getActionCommand() возвращает строку, связанную с этим компонентом, установленную через setActionCommand(), тогда как метод getSource() возвращает объект класса Object, определяющий источник события.