Czy można zaprojektować GUI w taki sposób?

0

Siema, czy w Javie FX istnieje możliwość zaprojektowania GUI w taki sposób?:

  1. W uruchomionym oknie programu wyświetlana jest tylko rozwijana lista, z której można wybrać interesującą nas w danej chwili pozycję.
  2. Po wybraniu tej pozycji z listy... poniżej w tym samym oknie wyświetlone zostaną przyciski, pola tekstowe, itp.
  3. Po wybraniu innej pozycji wyświetlone wcześniej przyciski, pola tekstowe, itp. zostaną zamienione na inne. Lista powinna być widoczna cały czas.

Proszę o jakieś sugestie jak mógłbym osiągnąć taki efekt.

Dodam, że Java FX to dla mnie nowość, którą dopiero poznaję.

Na chwilę obecną tak wygląda moja aplikacja (wyświetla tylko listę, bo nie wiem jak się zabrać za to co opisałem wyżej):

package test;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Tooltip;

public class Test extends Application {

    private void init(Stage primaryStage) {
        Group root = new Group();
        primaryStage.setResizable(false);
        primaryStage.setScene(new Scene(root, 500, 500));
        ChoiceBox cb = new ChoiceBox();
        cb.getItems().addAll("A", "B", "C");
        cb.getSelectionModel().selectFirst();
        cb.setTooltip(new Tooltip("Wybierz coś..."));
        root.getChildren().add(cb);
    }

    public double getSampleWidth() {
        return 500;
    }

    public double getSampleHeight() {
        return 500;
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        init(primaryStage);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
1

Korzystając m.in. z podmieniania komponentów w komponentach:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Pos;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FourProgrammers_GUIExample extends Application {

    private HBox hBox;
    private VBox vBoxSet_1;
    private VBox vBoxSet_2;

    public Parent createContent() {

        /* layout */
        BorderPane layout = new BorderPane();

        /* layout -> center */
        hBox = new HBox(30);

        /* layout -> center -> left */
        VBox vBoxLeft = new VBox(10);

        ObservableList<String> ol = FXCollections.observableArrayList("Set 1", "Set 2");
        ComboBox<String> cbSets = new ComboBox<String>(ol);
        cbSets.setOnAction(ae -> {
            if (cbSets.getSelectionModel().getSelectedItem().equals("Set 1")) {
                hBox.getChildren().set(1, vBoxSet_1);
            } else {
                hBox.getChildren().set(1, vBoxSet_2);
            }
        });
        cbSets.getSelectionModel().select("Set 1");

        /* layout -> center -> left (add items) */
        vBoxLeft.getChildren().addAll(cbSets);
        vBoxLeft.setAlignment(Pos.CENTER);

        /* layout -> center -> right */

        /* layout -> center -> right -> set 1*/
        vBoxSet_1 = new VBox(10);
        Button button_1 = new Button("Button 1");
        Button button_2 = new Button("Button 2");
        Button button_3 = new Button("Button 3");
        Button button_4 = new Button("Button 4");

        /* layout -> center -> right -> set 1 (add items) */
        vBoxSet_1.getChildren().addAll(button_1, button_2, button_3, button_4);
        vBoxSet_1.setAlignment(Pos.CENTER);

        /* layout -> center -> right -> set 2*/
        vBoxSet_2 = new VBox(10);
        Button button_5 = new Button("Button 5");
        Button button_6 = new Button("Button 6");
        Button button_7 = new Button("Button 7");
        Button button_8 = new Button("Button 8");

        /* layout -> center -> right -> set 2 (add items) */
        vBoxSet_2.getChildren().addAll(button_5, button_6, button_7, button_8);
        vBoxSet_2.setAlignment(Pos.CENTER);

        /* layout -> center (add items) */
        hBox.getChildren().addAll(vBoxLeft, vBoxSet_1);
        hBox.setAlignment(Pos.CENTER);

        /* return layout */
        layout.setCenter(hBox);
        return layout;
    }

    @Override
    public void start(Stage stage) throws Exception {
        stage.setScene(new Scene(createContent()));
        stage.setWidth(200);
        stage.setHeight(200);
        stage.show();
    }

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0