始终为 JavaFX ListView 显示垂直滚动条

men*_*ics 3 javafx-2

ListView 似乎已经有一个滚动条。我希望滚动条始终可见。原因是因为我在它上面放了一个标题,并在滚动条和标题之间的角落里放了一个按钮。如何让 ListView 滚动条始终显示?

Seb*_*ian 5

您可以将其放入适当大小的 ScrollPane 中,并将 ScrollPane 的 vbar 策略设置为 ALWAYS:

  @Override
  public void start(Stage primaryStage) throws Exception {
    ScrollPane pane = new ScrollPane();
    ListView<String> list = new ListView<String>();
    ObservableList<String> items = FXCollections.observableArrayList(
            "Single", "Double", "Suite", "Family App");
    list.setItems(items);
    pane.prefWidthProperty().bind(list.widthProperty());
    pane.prefHeightProperty().bind(list.heightProperty());
    pane.setContent(list);
    pane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
    Group group = new Group();
    group.getChildren().add(pane);
    Scene scene = new Scene(group, 500, 500);
    primaryStage.setScene(scene);
    primaryStage.show();
  }
Run Code Online (Sandbox Code Playgroud)

  • 事情没那么简单(我希望是这样)。问题是 ListView 正在以设置的默认大小自动创建,这与其内容的大小不匹配(我发布了另一个关于此的问题)。因为它不会自动调整 ListView 的大小,所以我认为这个解决方案不会奏效。如果您有一个超宽的列,您将在滚动窗格内获得 ListView 的水平滚动条。如果您向代码中添加多行,您会看到它们被截断而无法看到它们(或者如果您不禁用滚动窗格的水平滚动条,则会看到两个垂直滚动条)。 (3认同)
  • 我的代码有效:您没有要求水平滚动条的行为,而只是要求垂直滚动条的行为。如果您不想显示水平滚动条,您应该要求这样做。一个简单的 `pane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);` 足以实现这一点。 (2认同)