JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen

Diskutiere Zugriff auf Fenster/Layout-Container in eigenen Klassen im AWT, Swing, JavaFX & SWT Bereich.
P

Paz1

Vorab: Bin Anfänger und es ist eig auch ne Anfänger-Frage, deshalb: Sagt bitte bescheid, falls die Frage eher in "Java Basics". Dann verschiebe ich es natürlich gleich.

Hallo zusammen,
Ich würde gerne zwischen Layout-Containern bzw. Fenstern per Knopfdruck (Button) wechseln. Dabei will ich, der Übersicht wegen, jedes Fenster/Container in eine eigene Klasse stecken (ich denke, das ist normal so).

Bei Fenstern lasse ich die Klassen von Stage erben und erzeuge eine neue Instanz der Klasse über den Konstruktor (in Button.setOnAction(...).
Das funktioniert, aber ich erzeuge ja jedes Mal das Fenster aufs neue und kann deswgen keine Infos im Fenster(in der Instanz der Klasse) speichern...

Bei Layout-Containern bin ich leider völlig überfordert. Da würde ich die Klassen von einem Pane erben lassen. Allerdings kann ich mir dieses Pane nicht anzeigen lassen, weil ich dei Pane ja meine (immer gleiche) Szene setzten will. Und diese ist ja in der Main-Klasse in der Start-Methode (worauf ich es nicht schaffe von einer anderen Klasse aus zuzugreifen).

Ich hoffe, mein Anliegen ist halbgwegs verständlich. Habe auch wirklich schon viel im Internet und Forum gestöbert, aber bin bisher auf keine Lösung gestoßen...

Viele Grüße und Danke schonmal! :)
 
L

lam_tr

Vorab: Bin Anfänger und es ist eig auch ne Anfänger-Frage, deshalb: Sagt bitte bescheid, falls die Frage eher in "Java Basics". Dann verschiebe ich es natürlich gleich.

Hallo zusammen,
Ich würde gerne zwischen Layout-Containern bzw. Fenstern per Knopfdruck (Button) wechseln. Dabei will ich, der Übersicht wegen, jedes Fenster/Container in eine eigene Klasse stecken (ich denke, das ist normal so).

Bei Fenstern lasse ich die Klassen von Stage erben und erzeuge eine neue Instanz der Klasse über den Konstruktor (in Button.setOnAction(...).
Das funktioniert, aber ich erzeuge ja jedes Mal das Fenster aufs neue und kann deswgen keine Infos im Fenster(in der Instanz der Klasse) speichern...

Bei Layout-Containern bin ich leider völlig überfordert. Da würde ich die Klassen von einem Pane erben lassen. Allerdings kann ich mir dieses Pane nicht anzeigen lassen, weil ich dei Pane ja meine (immer gleiche) Szene setzten will. Und diese ist ja in der Main-Klasse in der Start-Methode (worauf ich es nicht schaffe von einer anderen Klasse aus zuzugreifen).

Ich hoffe, mein Anliegen ist halbgwegs verständlich. Habe auch wirklich schon viel im Internet und Forum gestöbert, aber bin bisher auf keine Lösung gestoßen...

Viele Grüße und Danke schonmal! :)
Wieso packst du die zwei Layout Container nicht in ein StackPane (arbeitet an sich wie ein Stapel). Die StackPane steckst du dann in die Scene.

Code:
Button b1 = new Button(""Switch To P2");
Button b2 = new Button(""Switch To P1");

BorderPane p1 = new BorderPane (b1);
BorderPane p2 = new BorderPane (b2);

b1.setOnMouseClicked(e->p2.toFront());
b2.setOnMouseClicked(e->p1.toFront());

StackPane parent = new StackPane( );
parent.getChildren().addAll(p1,p2);
Ich habe das jetzt ohne IDE runtergeschrieben um dir zu verdeutlichen wie man es eventuell machen kann.
 
P

Paz1

Button b1 = new Button(""Switch To P2");
Button b2 = new Button(""Switch To P1");

BorderPane p1 = new BorderPane (b1);
BorderPane p2 = new BorderPane (b2);

b1.setOnMouseClicked(e->p2.toFront());
b2.setOnMouseClicked(e->p1.toFront());

StackPane parent = new StackPane( );
parent.getChildren().addAll(p1,p2);
Wenn ich aber hier den Inhalt von p1 und p2 in eine separate Klasse schreiben möchte (also inkl. Buttons) funktioniert das doch nicht mehr, oder?
Ich suche momentan auch (noch) nicht nach einer speziellen Lösung sondern eher nach der Herangehensweise. Also, wie ma Programme mit vielen Fenster, Menüs etc. aufbaut. Also Dinge wie z. B. ein InstallWizard
 
L

lam_tr

Ich benutze an der Stelle sehr gerne den Publish/Subscribe Verfahren über den EventBus.

Zum Beispiel bei InstallWizard, wenn ich auf "Abschließen" klicke, soll dann im MainPanel über den EventBus zum Beispiel einen Editor öffnen oder andere Ansichten updaten.

Das sollte auch güt über Dependency Injection gehen.
 
P

Paz1

OK, ich glaube, mir fehlen hierfür noch einige Grundlagen... Trotzden vielen Dank!
Ich mach dann mal weiter in der Theorie/Übung und versuche mich dann wieder hier für Feedback zu melden.
 
L

lam_tr

OK, ich glaube, mir fehlen hierfür noch einige Grundlagen... Trotzden vielen Dank!
Ich mach dann mal weiter in der Theorie/Übung und versuche mich dann wieder hier für Feedback zu melden.
Show mal hier ein schönes Bild von Google Bild Link.

An sich ist das ein super einfaches Prinzip womit ich mich sehr schnell eingearbeitet habe.

Link zum EventBus: Link

Überall wo do auf dem Event horchen willst machst du einfach nur folgenden Code, hier wird MessageEvent mitgegeben aber prinzipiell kannst du ein beliebiges Object mitgeben.
Code:
@Subscribe(threadMode = ThreadMode.MAIN) 
public void onMessageEvent(MessageEvent event) {/* Do something */};
Einzige Bedingung bei der Sache ist, die Klasse muss beim EventBus registriert werden

Code:
EventBus.getDefault().register(this);
Und dort wo es abgefeuert wird
Code:
EventBus.getDefault().post(new MessageEvent());
 
Thema: 

Zugriff auf Fenster/Layout-Container in eigenen Klassen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben