web-dev-qa-db-fra.com

getSource () et getActionCommand ()

Qu'est-ce que getSource? et que revient-il?

et qu'est-ce que getActionCommand () et que renvoie-t-il ??

Je suis confus entre ces deux-là, est-ce que quelqu'un peut me les donner ou les différencier? à quoi servent getSource et getActionCommand () dans les interfaces utilisateur? spécifiquement TextField ou JTextField?

18
user962206

En supposant que vous parlez de la classe ActionEvent , alors il y a une grande différence entre les deux méthodes.

getActionCommand() vous donne une chaîne représentant la commande d'action. La valeur est spécifique au composant; pour un JButton vous avez la possibilité de définir la valeur avec setActionCommand(String command) mais pour un JTextField si vous ne le définissez pas, il vous donnera automatiquement la valeur du champ de texte. Selon le javadoc, c'est pour la compatibilité avec Java.awt.TextField.

getSource() est spécifié par la classe EventObject dont ActionEvent est un enfant (via Java.awt.AWTEvent). Cela vous donne une référence à l'objet dont l'événement est issu.

Modifier:

Voici un exemple. Il y a deux champs, l'un a une commande d'action explicitement définie, l'autre pas. Saisissez du texte dans chacun, puis appuyez sur Entrée.

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

}
18
Qwerky

getActionCommand()

Renvoie la chaîne de commande associée à cette action. Cette chaîne permet à un composant "modal" de spécifier une commande parmi plusieurs, selon son état. Par exemple, un seul bouton peut basculer entre "afficher les détails" et "masquer les détails". L'objet source et l'événement seraient les mêmes dans chaque cas, mais la chaîne de commande identifierait l'action prévue.

IMO, ceci est utile dans le cas où vous utilisez un seul composant de commande pour lancer différentes commandes en fonction de son état, et en utilisant cette méthode, votre gestionnaire peut exécuter les bonnes lignes de code.

JTextField a JTextField#setActionCommand(Java.lang.String) méthode que vous pouvez utiliser pour définir la chaîne de commande utilisée pour les événements d'action générés par elle.

getSource()

Renvoie: l'objet sur lequel l'événement s'est produit initialement.

Nous pouvons utiliser getSource() pour identifier le composant et exécuter les lignes de code correspondantes dans un écouteur d'action. Ainsi, nous n'avons pas besoin d'écrire un écouteur d'action distinct pour chaque composant de commande. Et puisque vous avez la référence au composant lui-même, vous pouvez si vous devez apporter des modifications au composant à la suite de l'événement.

Si l'événement a été généré par JTextField, la fonction ActionEvent#getSource() vous donnera la référence à l'instance JTextField elle-même.

9
Bhesh Gurung

J'utilise getActionCommand () pour entendre les boutons. J'applique le setActionCommand () à chaque bouton afin que je puisse entendre chaque fois qu'un événement est exécuté avec event.getActionCommand ("La valeur setActionCommand () du bouton").

J'utilise getSource () pour JRadioButtons par exemple. J'écris des méthodes qui retournent chaque JRadioButton donc dans ma classe d'écoute, je peux spécifier une action chaque fois qu'un nouveau JRadioButton est pressé. Ainsi, par exemple:

public class SeleccionListener implements ActionListener, FocusListener {}

Donc, avec cela, je peux entendre les événements de bouton et les événements radioButtons. Voici des exemples de la façon dont j'écoute chacun:

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

Dans ce cas, GUISeleccion.BOTON_ACEPTAR est une "chaîne finale statique publique" utilisée dans JButtonAceptar.setActionCommand (BOTON_ACEPTAR).

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

Dans celui-ci, j'obtiens la source de tout JRadioButton qui est focalisé lorsque l'utilisateur le frappe. guiSeleccion.getJrbDat () retourne la référence au JRadioButton qui est dans la classe GUISeleccion (c'est un Frame)

1
QuiteSure

La méthode getActionCommand () renvoie une chaîne associée à cet ensemble de composants via setActionCommand (), tandis que la méthode getSource () renvoie un objet de la classe Object spécifiant la source de l'événement.

0
PENNY