Java - doClick aus ActionPerformed aufrufen

Hallo zusammen,

ich habe mehrere Buttons im Programm, zwei davon Auftrag speichern und Arbeitsschritt hinzufügen.

Nun will ich im ActionPerformed Ereignis des zweiten Buttons den ersten Button per doClick() aufrufen.

Das vermutliche Problem (es funktioniert nämlich nicht) ist dass beide Buttons über die selbe ActionPerformed-Methode angesprochen werden.

Folgendes will ich haben. Gibts ne Möglichkeit oder liegt das Problem gar nicht da?

actionPerformed(ActionEvent e)
{
if(e.getActionCommand == speichern)
{
tu was
}

else if(e.getActionCommand == hinzufügen)
{
tu was
buttonSpeichern.doClick();
}
}

Vielen Dank.
mfg Sque

ganz einfach: Lager das erste tuwas in eine eigene methode aus und ruf die dann aus beiden buttonclicks auf.
Grüße,

Hallo,

tut mir leid, aber ich verstehe dich nicht ganz. Warum willst du den Button klicken lassen?
Nimm für jeden Button eine eigene Actionperform- methode.

deinButton = new JButton();
deinButton.addActionListener(new java.awt.event.ActionListener() {
 @Override
 public void actionPerformed() {
 deinButtonActionPerformed();
 }
 });
deinZweiterButton = new JButton();
deinZweiterButton.addActionListener(new java.awt.event.ActionListener() {
 @Override
 public void actionPerformed() {
 deinZweiterButtonActionPerformed();
 }
 }); 

deinButtonActionPerformed und deinZweiterButtonActionPerformed heissen die Methoden, welche dann bei zB Klick aufgerufen werden. Und in einer Methode kannst du dann eine andere Methode aufrufen.

private void deinButtonActionPerformed() {
// deine erste Methode die irgendwas macht
deinZweiterButtonActionPerformed(); // hier wird die Methode des anderen Buttons aufgerufen
}

private void deinZweiterButtonActionPerformed() {
// hier wird was anderes gemacht
}

Hoffe, das hilft

Torsten

Hi.

Ja, das kann schon sein, dass das mit dem erzeugten ActionEvent zusammenhängt. Ich tendiere ja spontan dazu es so zu machen:

actionPerformed(ActionEvent e) {
if(e.getActionCommand == speichern) {
doSave();
} else if(e.getActionCommand == hinzufügen) {
doAdd();
doSave();
}
}

Der Overhead, welcher durch den zusätzlichen Methodenaufruf hinzukommt, ist vernachlässigbar. Außerdem ist es so etwas sauberer gegliedert und die Speichern-Aktion kann auch mit minimalem Aufwand durch Strg+S aufgerufen werden.

Tom

Sorry, habe nächste Woche eine wichtige Deadline und derzeit leider keine Zeit für etwas anderes.

Hallo

A l s o:
Hier hast du einen grundsätzlichen Denkfehler. Wenn man eine Methode für mehr als ein Ereigniss nutzen möchte oder muss so ist es klar diese nicht als eine Ereignissfunktion darzustellen.
Dies wiederspricht komplett der objektorientierten Programmierung.
Beide „Klick“ Methoden sollte die selbe Funktion benutzen welche einzeln in der klasse (und dort „private“) liegt.

Dann kannst du jederzeit einzelne Bedingungen zu den "Klick"Methoden hinzufügen.

Ark

Hi,
das Prinzip ist hier eigentlich sehr gut erklärt

http://openbook.galileodesign.de/javainsel5/javainse…

zu jedem Button eine Funktion, die ausgeführt wird wenn der Button geklickt wird. Wird die Funktion für den zweiten Buttonklick ausgeführt, ruft sie die Funktion für den ersten Buttonklick auf…

Gruß
Michael

Hi Sque,
so funktioniert es:

________
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Frame extends JFrame {
ActionListener al = new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
System.out.println(„Button " + ((JButton) e.getSource()).getName() +“ gedr\u00DCckt!");
}
};

public static void main(String[] args) {
new Frame();
}

public Frame() {
setLayout(new GridBagLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
JButton jb1 = new JButton(„Klickme1“);
jb1.setName(„1“);
JButton jb2 = new JButton(„Klickme2“);
jb2.setName(„2“);
add(jb1);
add(jb2);
jb1.addActionListener(al);
jb2.addActionListener(al);
pack();
setVisible(true);
}

}
____

Ich hoffe, das hilft dir.

Viele Grüße

tincian

Hallo Sque,

ist es wirklich notwendig, die doClick-Methode des zweiten Buttons aufzurufen? Ich würde aus der actionPerformed-Methode – deren Bedeutung ja rein Swing-technisch ist – auf jeden Fall eigene „Business“-Methoden (wie etwa speichere(), fuegeHinzu(), …) aufrufen, in denen Deine Programmlogik dann weiterverarbeitet wird, damit diese nicht zu sehr an die Swing-Technologie gekoppelt ist. Dann ist es auch kein Problem, nach fuegeHinzu() direkt auch noch speichere() aufzurufen:

actionPerformed(ActionEvent e)
{
 if(e.getActionCommand == speichern)
 {
 speichere();
 }
 else if(e.getActionCommand == hinzufügen)
 {
 fuegeHinzu();
 speichere();
 }
}

(Nichtsdestotrotz muss ich zugegeben, dass ich nicht weiß, warum vom buttonSpeichern.doClick() nicht wieder die actionPerformed-Methode aufgerufen werden sollte… Das sollte eigentlich genauso funktionieren.)

Schöne Grüße,

Manfred

Kann ich dir leider nicht beantworten.

Moin,

sorry, ich habe keine Ahnung in welchem Kontext Du Dich bewegst.

Da kann ich Dir leider nicht weiter helfen.

TH

Sorry, kann ich leider nicht beantworten.

Ich würde das wahrscheinlich anders regeln. Weil: wenn es sich um zwei verschiedene Aktionen(!) handelt gibt es keinen Grund das ganze in einer Action abzuhandeln. Jede Action sollte für eine Aufgabe erstellt werden. So könntest du eine Methode speichern() und tuwas() erstellen. Bei deiner eigentlichen SpeichernAction rufst Du nur speichern() auf bei deinem anderen Button tuwas() und dann speichern().

Ich würde das wahrscheinlich anders regeln. Weil: wenn es sich um zwei verschiedene Aktionen(!) handelt gibt es keinen Grund das ganze in einer Action abzuhandeln. Jede Action sollte für eine Aufgabe erstellt werden. So könntest du eine Methode speichern() erstellen und tuwas() erstellen. Bei deiner eigentlichen SpeichernAction rufst Du nur speichern() auf bei deinem anderen Button tuwas() und dann speichern().

Hallo Sque,

möglicherweise liegt das Problem an der Namensgebung des Buttons „hinzufügen“.

Gruss
Experte