Как сделать горизонтальное растягивание элементов
Не знаю, как назвать. Мне нужно сделать так, чтобы я мог менять длину элементов в горизонтальном "списке" вот так:
Я сделал это, но как-то очень топорно. Прошу подсказать, как сделать это лучше, например, чтобы легко можно было написать код для нескольких (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);
}
});
}
}
