Wie es anstellen das ActionPerformed einen Wert zurückgibt?

Rufus.Mueller

Bekanntes Mitglied
Liebe Freunde,

bekanntermaßen hat die Methode ActionPerformed ja keinen Rückgabewert. Das ist schlecht, weil ich genau so etwas bräuchte.

Hintergrund: Bei meinem Programm muss der Anwender einige Eingaben tätigen. Diese Eingaben werden in einem Array abgespeichert. Wenn der Anwender fertig ist, soll er einen Button "Fertig" auswählen. Der ActionListener dieses Buttons soll dann besagtes array zurückgeben.

Gibt es einen Trick um das doch noch so zu bewerkstelligen?

Andernfalls würd' ichs über Umwege machen, bis jetzt ist meine Idee: Den ActionListener this.eineNochzuImplementierendeMethode aufrufen lassen und diese Methode ruft dann eine Methode auf der anderen Klasse auf (die, die das Objekt mit den ActionListenern ursprünglich aufgerufen hat) und übergibt das array halt als Parameter.
 
M

Marcinek

Gast
Ja, du baust dir dein eigenes Event auf und dazu einen entsprechenden eventListener.

ActionPerformed schmeißt dann ein Event, dass Action und das entsprechende Arrayenthält.
 

Volvagia

Top Contributor
Wie genau ist dein Aufbau? Die Meisten implementieren Listener nur anonym, das könnte so aussehen:

Java:
public class IrgendeinFrame extends JFrame
{
	private String[] result;
	private List<IrgendeinFrameListener> listeners;

	public IrgendeinFrame()
	{
		super();
		listeners = new LinkedList<IrgendeinFrameListener>();
		result = new String[1];

		JButton button = new JButton();
		button.addActionListener(new ActionListener() {
			public void actionPerformed()
			{
				berechneIrgenwas();
			}
		});
		add(button);

		JButton finishButton = new JButton();
		finishButton.addActionListener(new ActionListener() {
			public void actionPerformed()
			{
				fireIrgendwasEvent();
				dispose();
			}
		});
		add(finishButton);
	}
	private void berechneIrgendwas()
	{
		result[0] = "41";
	}
	protected void fireIrgendwasEvent()
	{
		if(listeners.size() == 0)
			return;

		SwingUtilities.invokeLater(new Runnable() {
			public void run()
			{
				for(Listener l:listeners)
					l.irgendwasPassiert(result);
			}
		});
	}
	public void addListener(IrgendeinFrameListener l)
	{
		listeners.add(l);
	}
	
	public interface IrgendeinFrameListener
	{
		public void irgendwasPassiert(String[] result);
	}
}

etc., usw. Vom Hirn in die Tasten. Übrigens soll man laut FindBugs eher keine Arrays per Methode übergeben, das war nur ein Beispiel. Aber vergessen warum.
 
Zuletzt bearbeitet:
M

Marcinek

Gast
keine Arrays per Methode übergeben, das war nur ein Beispiel. Aber vergessen warum.

Weil du keine Ahnung hast, was die Methode mit dem Array anstellt ;)

Die meisten Listener sind gewiss nicht Anonym... Bzw ist das eine Behauptung, die man so nicht lange halten kann.

Ich würde mir das genau überlegen, wie man das macht.
 

Rufus.Mueller

Bekanntes Mitglied
Ja, du baust dir dein eigenes Event auf und dazu einen entsprechenden eventListener.

ActionPerformed schmeißt dann ein Event, dass Action und das entsprechende Arrayenthält.

Ich versuche nach diesem Tutorium vorzugehen: http://www.java-forum.org/allgemeines/3212-listeners-events.html

Bisher habe ich ein Interface implementiert, wobei MeinEvent noch rot unterringelt ist.

Java:
public interface ListenerMitReturn {

	 public abstract Sequenz changeHappened(MeinEvent);
	 
}


Aus dem Tutorium ist nicht ersichtlich wo "ChangeEvent" implementiert wird, ist das eine eigenen Klasse? In der Signatur taucht der Begriff Klasse zumindest nicht auf.


@Volvagia

Soweit ich es verstehe, implementiere ich ihn anonym (ich kenne eigentlich auch nur diese Art der Implementierung für Listener):

Java:
fertigButton.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg) {

			
				
			};
		});
 

Volvagia

Top Contributor
Ach so, weil sich dann Schreibzugriffe auf beide Klassen auswirken?

Du hast recht, es war falsch geschrieben. Dabei handelt es sich eigendlich nur um meine Beobachtungen, hauptsächlich hier im Forum. Ich habe es eher als Tatsache geschrieben.

Es gibt ja folgende 3 Möglichkeiten, einen Listener zu implementieren:

Die Hauptklasse implementiert den Listener, per Event-Source wird dann in der implementierten Methode geprüft welches Element den Listener abgefreuert hat. Dadurch wird aber die Methode auf Dauer sehr groß und meiner Meinung nach nicht so ordentlich wie seperate Listener.
Die Klasse wird anonym implementiert und ruft dann einfach ein paar wenige Methoden auf, wie in meinen Beispiel. Dadurch hat man aber natürlich keinen Schreibzugriff auf Methodenvariablen.
Es gibt eine eigene Klasse für die Listener. Dadurch muss diese Klasse aber auch sämtliche Ressourcen, die womöglich in der Hauptklasse verändert werden kennen was zu erhöhten Abhängigkeiten führt.

Ich denke das waren alle. Wenn ich irgendwo einen Denkfehler gemacht habe oder eine Möglichkeit vergessen, sagt es mir bitte. Aber ich denke, die 2. Möglichkeit ist wegen den Vor/Nachteilen die bevorzugte, oder?


@Rufus: Schau in mein Beispiel, da habe ich auch gleich einen eigenen Listener mit eingebaut. MeinEvent muss als Klasse natürlich existieren, und du musst aus irgend einen Grund einen Namen nach der Klasse eintippen.
 
Zuletzt bearbeitet:

Rufus.Mueller

Bekanntes Mitglied
Ich habe jetzt diesen Listener und dieses Event implementiert.

Java:
import java.awt.event.ActionEvent;


public class MeinEvent extends ActionEvent {

	public MeinEvent(Object source, int id, String command) {
		super(source, id, command);
		// TODO Auto-generated constructor stub
	}

}


Java:
import java.awt.event.ActionListener;



public interface ListenerMitReturn extends ActionListener {

	 public abstract Sequenz actionPerformedMitReturn(MeinEvent e);
	 
	 
	 
}


Und in der Hauptklasse steht das

Java:
fertigButton.addActionListener(new ListenerMitReturn() {



			@Override
			public Sequenz actionPerformedMitReturn(MeinEvent e) {
				// TODO Auto-generated method stub
				
				System.out.println("test");
				return eingabeSequenzVP;
				
				
				
			}

			@Override
			public void actionPerformed(ActionEvent e) {
				System.exit(1);

				
			}



		});

Drücke ich auf meinen Button, endet Das Programm. Kommentiere ich Syste.exit(1) aus passiert bei Buttondruck nichts.
 

Volvagia

Top Contributor
Ich glaube, du hast das falsch verstanden. Nicht den Button einen neuen Listener geben. Der kennt die Methode actionPerformedMitReturn ja garnicht und kann sie deshalb nicht aufrufen.
Registriere vom Aufrufer her den neuen Listener bei dem Fenster. Wenn "Fertig" gedrückt wird, feuere im ActionPerformed den Listener vom Fenster aus zum Aufrufer, damit er weiß das dort etwas los ist.
 

Guardi

Bekanntes Mitglied
Ich erstelle meine Listener NIE anonym. Gerade für MVC ist das einfach schlechter Stil.
Ich hab immer meinen Satz an abstrakten Listenern die ich verwende und konkretisiere.

Kommen wir zurück zu MVC:
Was ist denn das genau für ein Array? Business Objekt?
Dann kapsel es in ein Observable und regel das in View über update.
Wenn es zu reinen Darstellungszwecken dient dann bau eine eigene Controller-Klasse mir Referenz auf die View und stell dementsprechende Methoden bereit. Lass das Geraffel mit Rückgabewert bloss sein ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R actionPerformed wird nicht ausgeführt Java Basics - Anfänger-Themen 5
F actionPerformed() zur richtigen Zeit Java Basics - Anfänger-Themen 6
D JLabel ändern in actionperformed Java Basics - Anfänger-Themen 2
D KeyListener nicht mehr aktiv nach ActionPerformed Java Basics - Anfänger-Themen 2
S Wie werte vergleichen, die in actionPerformed-Methode hängen ? Java Basics - Anfänger-Themen 4
M Threads Thread.Sleep Problem im Zusammenhang mit GUI/ActionPerformed-Methode Java Basics - Anfänger-Themen 4
J In actionPerformed Zugriff auf öffentlich Methoden der Klasse Java Basics - Anfänger-Themen 4
Z Kann actionPerformed(ActionEvent) nicht überschreiben Java Basics - Anfänger-Themen 8
J Werte an Methode übergeben und gleichzeitig ActionPerformed einbeziehen. Java Basics - Anfänger-Themen 14
M OOP ActionPerformed Methode aus anderer AP aufrufen? Java Basics - Anfänger-Themen 5
M Variablen via actionPerformed mit Buttons ändern Java Basics - Anfänger-Themen 7
S Objekt an actionPerformed Methode übergeben Java Basics - Anfänger-Themen 7
A lokale Variable innerhalb "actionPerformed()" Java Basics - Anfänger-Themen 10
S actionPerformed(ActionEvent ev) Java Basics - Anfänger-Themen 4
Houly while Schleife im ActionPerformed Event Java Basics - Anfänger-Themen 8
R ActionPerformed: Methode ausführen Java Basics - Anfänger-Themen 3
0 Fehlermeldung: SteuerungsPanel$ButtonHandler.actionPerformed(Steu erungsPanel.java: Java Basics - Anfänger-Themen 2
R Thread in ActionPerformed-Methode unbekannt? Java Basics - Anfänger-Themen 4
R Wie getText mit actionPerformed verwenden? Java Basics - Anfänger-Themen 3
C actionPerformed(null) Java Basics - Anfänger-Themen 6
D Auf Buttondruck (actionperformed) painten Java Basics - Anfänger-Themen 5
H Frage zur Methode: actionPerformed Java Basics - Anfänger-Themen 2
A ActionPerformed Methode ohne Rückgabewert Java Basics - Anfänger-Themen 12
I actionPerformed funktioniert nicht Java Basics - Anfänger-Themen 13
DeeDee0815 JRadioButton, actionPerformed und Textfelder Java Basics - Anfänger-Themen 2
B Exception Handling in der ActionPerformed-Methode Java Basics - Anfänger-Themen 7
S Java GUI: Probleme mit EventListener und actionPerformed Java Basics - Anfänger-Themen 3
B actionPerformed und ComboBoxen Java Basics - Anfänger-Themen 7
J JMenu + ActionPerformed + ConntentPane Java Basics - Anfänger-Themen 4
D Fehlersuche actionPerformed Java Basics - Anfänger-Themen 6
S actionPerformed und JCheckBox Java Basics - Anfänger-Themen 4
N ActionListener - ActionPerformed - if soure= .... Java Basics - Anfänger-Themen 6
M Übergeben einer Variable an actionPerformed(ActionEvent e)? Java Basics - Anfänger-Themen 5
U actionPerformed - Source verständlich Java Basics - Anfänger-Themen 8
C Problem mit actionPerformed Java Basics - Anfänger-Themen 4
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
X wie bekomme ich durch Eingabeaufforderung definierte double in einen Befehl, welcher 3 erwartete double braucht? Java Basics - Anfänger-Themen 3
P Gibt es einen anderen Weg um "{}" in IntelliJ zu schreiben? Java Basics - Anfänger-Themen 5
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
F Hat es noch einen Sinn, alte Versionen zu lernen Java Basics - Anfänger-Themen 45
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
M Kommandozeilenparamter als EINEN String werten Java Basics - Anfänger-Themen 5
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
N Gibt es hierfür einen Shortcut Java Basics - Anfänger-Themen 5
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
K Wie verneine ich einen Regex? Java Basics - Anfänger-Themen 2
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
Poppigescorn Mithilfe einer Arrayliste einen Notenspiegel ausgeben Java Basics - Anfänger-Themen 12
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
L GUI- wie cancel ich einen Timer? Java Basics - Anfänger-Themen 10
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
LetsSebi Methode, die einen arry von objekten speichert in einer datei Java Basics - Anfänger-Themen 6
Devin Wo kann man einen Java Lehrplan finden? Java Basics - Anfänger-Themen 5
J Ist es möglich einen int Array wirklich leer zu initialisieren oder zu füllen? Java Basics - Anfänger-Themen 21
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
S First Time Mave: Wie ergänze ich einen Source-Folder? Java Basics - Anfänger-Themen 10
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
M Auf einen Array innerhalb eines Objekts zugreifen Java Basics - Anfänger-Themen 5
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
F Hilfe für einen Anfänger! Java Basics - Anfänger-Themen 4
O Ziehen im Array um einen Schritt in eine einzige beliebige Richtung Java Basics - Anfänger-Themen 5
N Wie kann ich einen String wieder zusammensetzen und ausgeben lassen? Java Basics - Anfänger-Themen 9
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
steven789hjk543 Kann man mit Java und Eclipse einen Virus programmieren? Java Basics - Anfänger-Themen 13
D Eingabe einscannen, ohne vorher einen Datentypen anzugeben? Java Basics - Anfänger-Themen 1
T Einen Stern malen Java Basics - Anfänger-Themen 32
T Einen Stern malen Java Basics - Anfänger-Themen 2
L Files verschieben in einen Ordner Java Basics - Anfänger-Themen 87
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
J Mit for Schleife einen String Rückwärts befüllen Java Basics - Anfänger-Themen 9
J Einen Buttonklick in Label anzeigen Java Basics - Anfänger-Themen 6
S Gibt es einen guten kostenlosen Online-kurs Java Basics - Anfänger-Themen 2
W Wie programmiere ich einen Potenzrechner? Java Basics - Anfänger-Themen 5
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
B Prüfen, ob es schon einen Termin gibt in einem Zeitraum Java Basics - Anfänger-Themen 5
B Wie instanzisiert man einen Cursor richtig? Java Basics - Anfänger-Themen 3
S Interface (WindowBuilder) Panels in einen Frame einfügen Java Basics - Anfänger-Themen 10
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
C Wie erstellt man einen Timer/Delay? Java Basics - Anfänger-Themen 1
C Wie kann ich einen User Input mit einer If-Anweisung verbinden? Java Basics - Anfänger-Themen 5
J Guten tag, Ich hoffe ihr habt einen schönen Sonntag und könnt mir helfen Java Basics - Anfänger-Themen 2
D Methoden 2 TextWatcher auf einen EditText Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben