getSource () и getActionCommand () - PullRequest
       27

getSource () и getActionCommand ()

18 голосов
/ 21 ноября 2011

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

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

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

Ответы [ 4 ]

18 голосов
/ 21 ноября 2011

Если вы говорите о классе 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);
  }

}
9 голосов
/ 21 ноября 2011

getActionCommand()

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

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

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

getSource()

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

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

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

1 голос
/ 26 мая 2016

Я использую 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 (это Frame)

0 голосов
/ 21 ноября 2011

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

...