我目前有一个带有FlowPane的ScrollPane作为内容。目前,FlowPane初始化时没有子节点,固定宽度和pref / min高度(但没有最大高度)。
在运行时将项目添加到FlowPane时(我单击了一些UI元素,并且向FlowPane添加了一些内容),但在FlowPane的添加项不再适合的情况下,ScrollPane应该调整其高度。
我不明白如何设置flowPane和ScrollPane的高度,以使其可行-如果这是开始的问题。目前,只要FlowPane的添加项不适合其初始高度,就会添加内容,但不可见。属于ScrollPane的滚动条从不调整其高度-如果确实如此,我可以向下滚动并查看内容。
假设我有一个具有一定宽度和高度的ScrollPane,一些视口宽度/高度和一个具有某些宽度/高度的FlowPane-最小/首选/最大尺寸的设置应该是什么?如何使scrollPane调整其滚动条行为或使内容可见?
ScrollPane的setFitToHeight已设置为true,似乎没有任何改变。
import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.ScrollPane.ScrollBarPolicy;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.stage.Stage;
public class FlowPaneTest extends Application
{
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception
{
// borderPane rootPane
BorderPane borderPane = new BorderPane();
borderPane.setMinSize(600, 600);
borderPane.setPrefSize(600, 600);
borderPane.setMaxSize(600, 600);
// container for the two scrollPanes below
FlowPane flow = new FlowPane();
borderPane.setRight(flow);
// two scrollPanes, each should resize it's height (width should be fixed) if
// children are added beyond it's current height
ScrollPane top = new ScrollPane();
ScrollPane bottom = new ScrollPane();
FlowPane scrollPaneContent = new FlowPane();
top.setContent(scrollPaneContent);
bottom.setContent(scrollPaneContent);
flow.getChildren().add(top);
flow.getChildren().add(bottom);
borderPane.setOnMouseClicked(new EventHandler<Event>()
{
@Override
public void handle(Event event)
{
Label l = new Label("test");
l.setMinSize(100, 100);
l.setPrefSize(100, 100);
l.setMaxSize(100, 100);
scrollPaneContent.getChildren().add(l);
}
});
// size settings
int width = 300, height = 300;
top.setHvalue(0.5);
top.setMinViewportHeight(height);
top.setPrefViewportHeight(height);
top.setMinViewportWidth(width);
top.setPrefViewportWidth(width);
top.setHbarPolicy(ScrollBarPolicy.ALWAYS);
top.setFitToHeight(true);
top.setMinSize(width, height);
top.setPrefSize(width, height);
top.setMaxWidth(width);
scrollPaneContent.setMinSize(width, height);
scrollPaneContent.setPrefSize(width, height);
scrollPaneContent.setMaxWidth(width);
scrollPaneContent.setPrefHeight(height);
bottom.setMinSize(width, height);
bottom.setPrefSize(width, height);
bottom.setMaxWidth(width);
bottom.setHvalue(0.5);
bottom.setMinViewportHeight(height);
bottom.setPrefViewportHeight(height);
bottom.setMinViewportWidth(width);
bottom.setPrefViewportWidth(width);
bottom.setHbarPolicy(ScrollBarPolicy.ALWAYS);
top.setFitToHeight(true);
bottom.setFitToHeight(true);
// stage
Scene scene = new Scene(borderPane, 600.0, 600.0);
primaryStage.setScene(scene);
primaryStage.show();
}
}
答案 0 :(得分:0)
尝试指定ScrollPane
的高度和宽度并添加此行
scrollPane.setFitToWidth(true);
答案 1 :(得分:0)
最后得到类似于以下这段丑陋的代码的代码-侦听窗格中子级的数量,并在每次向子级列表中添加某些内容时增加其大小:
curl http://localhost:3000/posts -i -X POST -d "title=Bigdadi Rules Posts&link=http://www.foo.com&upvotes=2"
有效,但感觉像是非正统的骇客。真的没有常规的方法可以这样做吗?