如何告诉ScrollPane,它的ScrollBars不会涵盖ScrollPane的内容?
我尝试将一个水平ListView放入ScrollPane中,这样我就可以添加其他ListView项目或删除它们并拥有一个ScrollBar,以防它们太多而无法在可用空间中显示。但是,只要发生这种情况,ScrollPane就会显示ScrollBars,它覆盖ListView。因此,如果空间不足,JavaFX会以这种方式显示ScrollBars,从而进一步减少空间。
如何解决此问题? 或者我可以动态更改ScrollPane内容的高度吗? (我只将字符串添加到ListView中)
最终,我希望在stackoverflow上实现类似标签列表的内容,您可以在其中添加标签并将其删除。但是,我不希望用户混淆使用哪个分隔符,并希望使用添加和删除按钮。
以下是我的尝试:
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 (由于声誉,无法发布图片)
或者是否有更合适的控制来实现这一目标?
答案 0 :(得分:1)
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);
}
}