de getSource() en getActionCommand()

Wat is getSource? en wat geeft het terug?

en wat is getActionCommand() en wat levert het op??

Ik raak in de war tussen deze twee, kan iemand ze aan mij geven of onderscheiden? wat is het nut van getSource en getActionCommand() in UI’s? specifiek TextField of JTextField?


Antwoord 1, autoriteit 100%

Ervan uitgaande dat je het hebt over de ActionEventklasse, dan is er een groot verschil tussen de twee methoden.

getActionCommand()geeft je een tekenreeks die het actiecommando vertegenwoordigt. De waarde is componentspecifiek; voor een JButtonheb je de mogelijkheid om de waarde in te stellen met setActionCommand(String command)maar voor een JTextFieldals je dit niet instelt, het geeft u automatisch de waarde van het tekstveld. Volgens de javadoc is dit voor compatibiliteit met java.awt.TextField.

getSource()wordt gespecificeerd door de klasse EventObjectwaarvan ActionEventeen kind is (via java.awt.AWTEvent). Dit geeft je een verwijzing naar het object waar de gebeurtenis vandaan kwam.

Bewerken:

Hier is een voorbeeld. Er zijn twee velden, de ene heeft een expliciete actieopdracht, de andere niet. Typ wat tekst in elk en druk op enter.

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

Antwoord 2, autoriteit 33%

getActionCommand()

Retourneert de opdrachtreeks die aan deze actie is gekoppeld. Met deze string kan een “modale” component een van de verschillende commando’s specificeren, afhankelijk van zijn status. Een enkele knop kan bijvoorbeeld schakelen tussen “details weergeven” en “details verbergen”. Het bronobject en de gebeurtenis zouden in elk geval hetzelfde zijn, maar de opdrachtreeks zou de beoogde actie identificeren.

IMO, dit is handig als je een enkel commando-component gebruikt om verschillende commando’s af te vuren op basis van de staat, en met deze methode kan je handler de juiste regels code uitvoeren.

JTextFieldheeft JTextField#setActionCommand(java.lang.String)methode die u kunt gebruiken om de opdrachtreeks in te stellen die wordt gebruikt voor actiegebeurtenissen die hierdoor worden gegenereerd.

getSource()

Retouren: het object waarop de gebeurtenis in eerste instantie plaatsvond.

We kunnen getSource()gebruiken om de component te identificeren en de corresponderende coderegels binnen een action-listener uit te voeren. We hoeven dus niet voor elke opdrachtcomponent een aparte action-listener te schrijven. En aangezien u de verwijzing naar het onderdeel zelf hebt, kunt u als u wijzigingen aan het onderdeel wilt aanbrengen als gevolg van de gebeurtenis.

Als de gebeurtenis is gegenereerd door de JTextField, dan geeft de ActionEvent#getSource()u de verwijzing naar de JTextField-instantie zelf.


Antwoord 3, autoriteit 4%

Ik gebruik getActionCommand() om knoppen te horen. Ik pas de setActionCommand() toe op elke knop, zodat ik kan horen wanneer een gebeurtenis wordt uitgevoerd met event.getActionCommand (“De waarde setActionCommand() van de knop”).

Ik gebruik bijvoorbeeld getSource() voor JRadioButtons. Ik schrijf methoden die elke JRadioButton retourneert, zodat ik in mijn Listener Class een actie kan specificeren telkens wanneer een nieuwe JRadioButton wordt ingedrukt. Dus bijvoorbeeld:

public class SeleccionListener implements ActionListener, FocusListener {}

Dus hiermee kan ik knopgebeurtenissen en radioButtons-gebeurtenissen horen. Hieronder volgen voorbeelden van hoe ik ze allemaal beluister:

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

In dit geval is GUISeleccion.BOTON_ACEPTAR een “public static final String” die wordt gebruikt in JButtonAceptar.setActionCommand(BOTON_ACEPTAR).

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

In deze krijg ik de bron van elke JRadioButton die gefocust is wanneer de gebruiker erop drukt. guiSeleccion.getJrbDat() retourneert de verwijzing naar de JRadioButton die in de klasse GUISeleccion zit (dit is een Frame)


Antwoord 4

De methode getActionCommand() retourneert een String die is gekoppeld aan die Component set via de setActionCommand() , terwijl de methode getSource() een Object van de klasse Object retourneert die de bron van de gebeurtenis specificeert.

Other episodes