JavaFX Tab auswählen mit JavaFX

Diskutiere Tab auswählen mit JavaFX im AWT, Swing, JavaFX & SWT Bereich.
M

MaggyMo

Guten Abend,
ich erstelle im Moment ein Java-Projekt und das zum ersten Mal mit JavaFX und habe leider noch ein paar Probleme.

Frage1:
In meinem Projekt gibt es eine Startseite mit zwei Buttons mit der Aufschrift "Tab1" und "Tab2". Je nachdem auf welchen Button man klickt, soll auf der danach folgenden Hauptseite das dementsprechende Tab ausgewählt sein. Das mit dem ersten Tab klappt, da dieses standardmäßig ausgewählt ist. Bei dem Button "Tab2" habe ich so meine Probleme. Weiß jemand, wie ich das lösen kann?

Frage2:
In diesem sogenannten zweiten Tab soll es eine Art Quiz geben. Dazu gibt es ein Label und darunter mehrere Buttons. Das Label stellt die Frage da und die Buttons die möglichen Antwortmöglichkeiten. Die nötigen Informationen dazu lese ich aus einer Textdatei aus. Ich habe eine Klasse Frage mit einer ArrayList von Strings , die als Antwortmöglichkeiten dienen. Leider schaffe ich es nicht, aus der Controller Klasse auf diese Liste zuzugreifen. Die Liste befindet sich in der Klasse Main. Ich habe es bereits mit einer Observer List versucht, aber irgendwie will das einfach nicht bei mir klappen, weil ich absolut nicht weiß, wie ich an diese Liste komme.


Liebe Grüße:)
 
L

lam_tr

Frage 1:
du kannst doch über tabPane.getSelectionModel().select(index) das gewünschte Tab selektieren.
Code:
button1.setOnMouseClicked(e-> tabPane.getSelectionModel().select(0));

button2.setOnMouseClicked(e-> tabPane.getSelectionModel().select(1));
Frage 2:
wieso packst du die Liste der Fragen nicht in die TabPane oder liest sie von dort aus? Ansonsten würde ich über Dependency Injection die Liste holen
Hier: https://github.com/google/guice/wiki/GettingStarted
 
M

MaggyMo

Frage 1:
du kannst doch über tabPane.getSelectionModel().select(index) das gewünschte Tab selektieren.
Code:
button1.setOnMouseClicked(e-> tabPane.getSelectionModel().select(0));

button2.setOnMouseClicked(e-> tabPane.getSelectionModel().select(1));
Frage 2:
wieso packst du die Liste der Fragen nicht in die TabPane oder liest sie von dort aus? Ansonsten würde ich über Dependency Injection die Liste holen
Hier: https://github.com/google/guice/wiki/GettingStarted
Was meinst du denn mit dem "e->"? Ich bin leider noch Anfänger.
Bzw. wie komme ich denn an die TabPane aus einem anderen Controller?
 
Zuletzt bearbeitet:
M

MaggyMo

Das ist ein Lambda-Ausdruck. Der meint das genau so, wie es da steht :)
Danke, das bringt mich schonmal um einiges weiter :) Ich dachte das wäre so eine Art Platzhalter für irgendwas.
Wie kann ich denn von einer Controller Klasse auf eine andere zugreifen? Weil ich komme in der aktuellen Klasse nicht an den/die tabPane ran. Mit getter und Setter hat es leider nicht geklappt.
 
mihe7

mihe7

Ich dachte das wäre so eine Art Platzhalter für irgendwas.
Nein, ein Lambda ist eine anonyme Funktion. Wenn Java irgendwo ein Interface erwartet, das die Implementierung von nur einer(!) Methode verlangt, dann muss man nicht eine anonyme Klasse schreiben, sondern kann ein Lambda verwenden.

Zum Beispiel würde man den ActionListener von Swing so als anonyme Klasse implementieren:
Java:
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent event) {
        System.out.println("Klick");
    }
});
Mit einem Lambda geht das schön kurz:
Java:
button.addActionListener(event -> System.out.println("Klick"));
Wie kann ich denn von einer Controller Klasse auf eine andere zugreifen? Weil ich komme in der aktuellen Klasse nicht an den/die tabPane ran. Mit getter und Setter hat es leider nicht geklappt.
Für JavaFX bin ich der falsche Ansprechpartner. Warum willst Du überhaupt von einem Controller auf einen anderen zugreifen? Wir hatten hier mal einen schönen MVC-Thread zum Thema.
 
M

MaggyMo

Nein, ein Lambda ist eine anonyme Funktion. Wenn Java irgendwo ein Interface erwartet, das die Implementierung von nur einer(!) Methode verlangt, dann muss man nicht eine anonyme Klasse schreiben, sondern kann ein Lambda verwenden.

Zum Beispiel würde man den ActionListener von Swing so als anonyme Klasse implementieren:
Java:
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent event) {
        System.out.println("Klick");
    }
});
Mit einem Lambda geht das schön kurz:
Java:
button.addActionListener(event -> System.out.println("Klick"));

Für JavaFX bin ich der falsche Ansprechpartner. Warum willst Du überhaupt von einem Controller auf einen anderen zugreifen? Wir hatten hier mal einen schönen MVC-Thread zum Thema.
Ahh, jetzt macht dieses "e->" Sinn, Danke !
Ich habe eine Art Startseite programmiert, auf der sich mehrere Buttons befinden. Klickt man auf einen dieser Button, wird die Startseite geschlossen und ein anderes Fenster öffnet sich. Dieses Fenster besitzt mehrere Tabs. Je nachdem welcher Button zuvor gedrückt wurde, soll das dementsprechende Tab vorausgewählt sein.
 
L

lam_tr

Ahh, jetzt macht dieses "e->" Sinn, Danke !
Ich habe eine Art Startseite programmiert, auf der sich mehrere Buttons befinden. Klickt man auf einen dieser Button, wird die Startseite geschlossen und ein anderes Fenster öffnet sich. Dieses Fenster besitzt mehrere Tabs. Je nachdem welcher Button zuvor gedrückt wurde, soll das dementsprechende Tab vorausgewählt sein.
Ich würde da EventBus benutzen, entweder Google Guava oder GreenRobot Eventbus. Wobei von GreenRobot ist es lightweight und wird sehr oft für Android benutzt.

Ansonsten kannst du auch direkt über den Selection Change TabPane#getSelectionModel#selectedItemProperty machen.
 
Thema: 

Tab auswählen mit JavaFX

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben