Как сделать горизонтальное растягивание элементов

Не знаю, как назвать. Мне нужно сделать так, чтобы я мог менять длину элементов в горизонтальном "списке" вот так:

введите сюда описание изображения

Я сделал это, но как-то очень топорно. Прошу подсказать, как сделать это лучше, например, чтобы легко можно было написать код для нескольких (3 и больше) элементов. Может быть, есть какой-то встроенный в JavaFX способ сделать это.

Мой код:

Main:

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        Pane pane1 = new Pane();
        pane1.setPrefWidth(100);
        pane1.setBackground(new Background(new BackgroundFill(Color.RED, CornerRadii.EMPTY, Insets.EMPTY)));
        Pane pane2 = new Pane();
        HBox.setHgrow(pane2, Priority.ALWAYS);
        pane2.setBackground(new Background(new BackgroundFill(Color.GREEN, CornerRadii.EMPTY, Insets.EMPTY)));
        MainPane root = new MainPane(pane1, pane2);
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(new Scene(root, 300, 275));
        primaryStage.show();
    }


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

MainPane:

public final class MainPane extends HBox {

    private double mx;

    public MainPane(Pane pane1, Pane pane2) {
        getChildren().addAll(pane1, pane2);
        setOnMouseMoved(mouseEvent -> {
            if (mouseEvent.getSceneX() < pane1.getWidth() + 9 && mouseEvent.getSceneX() > (pane1.getWidth() - 6)) {
                if (getCursor() != Cursor.H_RESIZE)
                    setCursor(Cursor.H_RESIZE);
            } else if (getCursor() != Cursor.DEFAULT)
                setCursor(Cursor.DEFAULT);
        });
        setOnMouseReleased(mouseEvent -> {
            if (getCursor() == Cursor.H_RESIZE && !(mouseEvent.getSceneX() < pane1.getWidth() + 9 && mouseEvent.getSceneX() > (pane1.getWidth() - 6)))
                setCursor(Cursor.DEFAULT);
        });
        setOnMousePressed(mouseEvent -> {
            if (getCursor() == Cursor.H_RESIZE)
                mx = mouseEvent.getSceneX() - (pane1.getWidth());
        });
        setOnMouseDragged(mouseEvent -> {
            if (getCursor() == Cursor.H_RESIZE) {
                double newPane1Width = mouseEvent.getSceneX() - mx;
                double newPane2Width = pane2.getWidth() - newPane1Width + pane1.getWidth();
                pane1.setPrefWidth(newPane1Width);
                pane2.setPrefWidth(newPane2Width);
            }
        });
    }
}

Ответы (0 шт):