Я обнаружил аномалию, которая, как мне кажется, может быть ошибкой JavaFX в ScrollPane или, возможно, просто проблемой с моей композицией.
Корневым узлом является BorderPane.Левый контент - это боковая панель с использованием VBox.Эта боковая панель не имеет полосы прокрутки.Центральным содержимым является ScrollPane.
BorderPane root = new BorderPane();
MenuBar top = new MenuBar();
root.setTop(top);
VBox left = new VBox();
root.setLeft(left);
ScrollPane center = new ScrollPane();
root.setCenter(center);
Когда размер окна изменяется по высоте меньше левого содержимого, нижние границы полос прокрутки не видны.
Эти снимки экрана иллюстрируют «ошибку»:
Вот небольшое тестовое приложение, которое я должен воспроизвести:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class ScrollPaneApplication extends Application {
public static void main(String[] args) {
ScrollPaneApplication.launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane root = new BorderPane();
root.setPadding(new Insets(10, 10, 10, 10));
final Menu menu1 = new Menu("File");
final Menu menu2 = new Menu("Options");
final Menu menu3 = new Menu("Help");
final MenuBar menuBar = new MenuBar();
menuBar.getMenus().addAll(menu1, menu2, menu3);
root.setTop(menuBar);
VBox leftBox = new VBox();
addLabel(leftBox);
leftBox.setSpacing(10);
root.setLeft(leftBox);
VBox box1 = new VBox();
box1.setSpacing(10);
addLabel(box1);
VBox box2 = new VBox();
box2.setSpacing(10);
addLabel(box2);
VBox box3 = new VBox();
box3.setSpacing(10);
addLabel(box3);
VBox box4 = new VBox();
box4.setSpacing(10);
addLabel(box4);
VBox box5 = new VBox();
box5.setSpacing(10);
addLabel(box5);
HBox box = new HBox();
box.setSpacing(10);
box.getChildren().addAll(box1, box2, box3, box4, box5);
ScrollPane scrollPane = new ScrollPane();
scrollPane.setContent(box);
root.setCenter(scrollPane);
Scene scene = new Scene(root, 1024, 1024);
primaryStage.setScene(scene);
primaryStage.show();
}
private void addLabel(VBox parentBox) {
TitledPane pane1 = new TitledPane();
pane1.setPadding(new Insets(10, 10, 10, 10));
pane1.setText("Loop 1");
VBox box1 = new VBox();
for (int i = 0; i < 10; i++) {
box1.getChildren().add(new Label("Label " + i));
}
pane1.setContent(box1);
TitledPane pane2 = new TitledPane();
pane2.setPadding(new Insets(10, 10, 10, 10));
pane2.setText("Loop 2");
VBox box2 = new VBox();
for (int j = 0; j < 10; j++) {
box2.getChildren().add(new Label("Label " + j));
}
pane2.setContent(box2);
TitledPane pane3 = new TitledPane();
pane3.setPadding(new Insets(10, 10, 10, 10));
pane3.setText("Loop 3");
VBox box3 = new VBox();
for (int k = 0; k < 10; k++) {
box3.getChildren().add(new Label("Label " + k));
}
pane3.setContent(box3);
parentBox.getChildren().addAll(pane1, pane2, pane3);
}
}