GetSource() и getActionCommand()
Что такое getSource? и что он возвращает?
и что такое getActionCommand() и что он возвращает?
Я смущаюсь между этими двумя, кто может дать или отличить их от меня? что использование getSource и getActionCommand() в пользовательском интерфейсе? в частности TextField или JTextField?
Ответы
Ответ 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, определяющий источник события.