你如何告诉一个ScrollPane,它的ScrollBars不包括ScrollPane的内容?
我尝试将一个水平的ListView放入一个ScrollPane中,这样我就可以添加额外的ListView项或删除它们,并拥有一个ScrollBar,以防它们太多而无法在可用的空间中显示。但是,无论何时发生这种情况,ScrollPane都会显示ScrollBars,这将覆盖ListView。因此,如果没有足够的空间,JavaFX会通过这样的方式显示ScrollBars,从而进一步减少空间。
我该如何纠正这种行为?或者我可以动态地更改ScrollPane内容的高度吗?(我只是在ListView中添加字符串)
最终,我希望实现类似于堆栈溢出的标签列表,在这里您可以添加标记并删除它们。但是,我不希望用户混淆要使用哪个分隔符,并希望使用“添加”和“删除”按钮。
以下是我尝试过的:
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 (由于声誉原因还不能发布图片)
或者是否有一个更合适的控制来实现这一点?
发布于 2014-07-31 11:49:38
ListView已经提供了所需的滚动条;您不需要将ListView放在ScrollPane中。
问题是,您通过设置ListView的prefHeight属性来限制它的高度。此高度包括滚动条的高度。与其设置prefHeight,不如将maxHeight设置为一个足够大的值,如果存在的话,该值可以同时容纳内容和滚动条。
还要确保您使用的布局容器将允许它垂直增长。
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);
}
}https://stackoverflow.com/questions/25055269
复制相似问题