le getSource() et getActionCommand()
Qu'est-ce que getSource? et que fait-il de retour?
et qu'est-ce que getActionCommand() et qu'est-ce qu'il renvoie??
je suis confus entre ces deux quelqu'un peut-il donner ou de les différencier pour moi? à quoi servent getSource et getActionCommand() dans les UI? plus précisément TextField ou component swing jtextfield?
4 réponses
en supposant que vous parlez de ActionEvent
classe, alors il ya une grande différence entre les deux méthodes.
getActionCommand()
vous donne une chaîne représentant la commande d'action. La valeur est une composante spécifique;JButton
vous avez l'option de définir la valeur avec setActionCommand(String command)
mais un JTextField
si vous ne définissez pas cela, 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 EventObject
classe ActionEvent
est un enfant de (via java.awt.AWTEvent
). Cela vous donne une référence à l'objet que l'événement est venu.
Edit:
voici un exemple. Il y a deux champs, l'un a une commande d'action explicitement définie, l'autre Non. Tapez 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);
}
}
renvoie la chaîne de commande associée à cette action. Cette chaîne permet à un composant" modal " de spécifier une ou plusieurs commandes, en fonction de 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 un seul command-component pour lancer différentes commandes basées sur 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é pour des événements d'action générés par ce dernier.
Renvoie: L'objet sur lequel l'Événement est apparue initialement.
nous pouvons utiliser getSource()
pour identifier la composante et exécutez les lignes de code correspondantes dans un écouteur d'action. Donc, nous n'avons pas besoin d'écrire un écouteur d'action séparé pour chaque composante de commande. Et puisque vous avez la référence au composant lui-même, vous pouvez si vous avez besoin d'apporter des changements au composant à la suite de l'événement.
Si l'événement a été généré par JTextField
puis ActionEvent#getSource()
vous donnera la référence à la JTextField
l'instance elle-même.
j'utilise getActionCommand() pour entendre les boutons. J'applique la commande setActionCommand () à chaque bouton pour que je puisse entendre chaque fois qu'un event est exécuté avec event.getActionCommand ("la valeur setActionCommand () du bouton").
j'utilise getSource () pour JRadioButtons par exemple. J'écris des méthodes qui renvoient chaque JRadioButton pour que dans ma classe D'écoute je puisse spécifier une action chaque fois qu'un nouveau JRadioButton est pressé. Ainsi, par exemple:
public class SeleccionListener implements ActionListener, FocusListener {}
donc avec ce bouton je peux entendre les événements et les radioButtons événements. Les exemples suivants sont des exemples de la façon dont je l'écoute de 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 de caractères finale statique publique " qui est 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 N'importe quel JRadioButton qui est focalisé quand l'utilisateur le frappe. guiSeleccion.getJrbDat () renvoie la référence au JRadioButton qui est dans la classe GUISeleccion (this is a Frame)
la méthode getActionCommand() renvoie une chaîne de caractères associée à ce composant définie par le biais de setActionCommand() , tandis que la méthode getSource() renvoie un objet de la classe objet spécifiant la source de l'événement.