首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >告诉ScrollBars of ScrollPane不要覆盖ScrollPane内容

告诉ScrollBars of ScrollPane不要覆盖ScrollPane内容
EN

Stack Overflow用户
提问于 2014-07-31 09:23:35
回答 1查看 2K关注 0票数 1

你如何告诉一个ScrollPane,它的ScrollBars不包括ScrollPane的内容?

我尝试将一个水平的ListView放入一个ScrollPane中,这样我就可以添加额外的ListView项或删除它们,并拥有一个ScrollBar,以防它们太多而无法在可用的空间中显示。但是,无论何时发生这种情况,ScrollPane都会显示ScrollBars,这将覆盖ListView。因此,如果没有足够的空间,JavaFX会通过这样的方式显示ScrollBars,从而进一步减少空间。

我该如何纠正这种行为?或者我可以动态地更改ScrollPane内容的高度吗?(我只是在ListView中添加字符串)

最终,我希望实现类似于堆栈溢出的标签列表,在这里您可以添加标记并删除它们。但是,我不希望用户混淆要使用哪个分隔符,并希望使用“添加”和“删除”按钮。

以下是我尝试过的:

代码语言:javascript
复制
ScrollPane scrollPane = new ScrollPane();
ObservableList<String> translations = FXCollections.observableArrayList();
translations.add("100dsfsd");
translations.add("200saf");
translations.add("300w5346");
translations.add("400ztkzu");
translations.add("500a3244tgs");
translations.add("600a324");
translations.add("4tgsarawt");
translations.add("4tgsarawt");
translations.add("4tgsarawt");
ListView listView = new ListView();
listView.setItems(translations);
listView.setOrientation(Orientation.HORIZONTAL);
listView.setPrefHeight(30);
scrollPane.setContent(listView);
scrollPane.setFitToHeight(true);
scrollPane.setPrefViewportHeight(30);
scrollPane.setPrefViewportWidth(200);
scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.AS_NEEDED);

这就是它的样子:

http://s14.directupload.net/images/140731/j3y6s3pw.png (由于声誉原因还不能发布图片)

或者是否有一个更合适的控制来实现这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-31 11:49:38

ListView已经提供了所需的滚动条;您不需要将ListView放在ScrollPane中。

问题是,您通过设置ListViewprefHeight属性来限制它的高度。此高度包括滚动条的高度。与其设置prefHeight,不如将maxHeight设置为一个足够大的值,如果存在的话,该值可以同时容纳内容和滚动条。

还要确保您使用的布局容器将允许它垂直增长。

代码语言:javascript
复制
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class HorizListViewTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        ObservableList<String> translations = FXCollections.observableArrayList();
        translations.add("100dsfsd");
        translations.add("200saf");
        translations.add("300w5346");
        translations.add("400ztkzu");
        translations.add("500a3244tgs");
        translations.add("600a324");
        translations.add("4tgsarawt");
        translations.add("4tgsarawt");
        translations.add("4tgsarawt");
        ListView<String> listView = new ListView<>();
        listView.setItems(translations);
        listView.setOrientation(Orientation.HORIZONTAL);
        listView.setMaxHeight(50);

        BorderPane root = new BorderPane();
        root.setCenter(new Label("Some content here"));
        root.setBottom(listView);

        Scene scene = new Scene(root, 400, 250);
        primaryStage.setScene(scene);

        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25055269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档