所以,基本上,我试图用间距等来实现这个可滚动的组件集,并且能够添加更多组件。 组件列表是自定义anchorpane组件。
以下是我工作的一个例子:
问题是在滚动窗格内使用网格窗格,由于某种原因,网格窗格根本不会填充滚动窗格的宽度。因此,如果我调整大小,一切都保持原样,而不是在gridpane列内拉伸。另外,如果我要坚持使用gridpane(在tilepane上看起来效果更好,除非组件彼此浮动,尽管方向是垂直的并且prefcolumns为1),我将如何添加更多行?这个想法是以一种不错的,用户体验的方式列出github repos。
感谢您的任何见解。 另外:那些回购不是我的 - 我没有,一个网站上的人做了(它做得不好,所以不要把我和他比较)。
答案 0 :(得分:5)
看起来您应该使用VBox
来保留AnchorPane
并将其放入ScrollPane
。在fitToWidth
上将true
设置为ScrollPane
,它应该强制锚定窗格占据滚动窗格视口的整个宽度(而不是更多),假设您没有& #39; t更改maxWidth
上AnchorPane
的默认属性。
模拟示例(如果您愿意,可以在FXML中轻松完成):
import java.util.Random;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class ScrollingVBox extends Application {
@Override
public void start(Stage primaryStage) {
final Random rng = new Random();
VBox content = new VBox(5);
ScrollPane scroller = new ScrollPane(content);
scroller.setFitToWidth(true);
Button addButton = new Button("Add");
addButton.setOnAction(e -> {
AnchorPane anchorPane = new AnchorPane();
String style = String.format("-fx-background: rgb(%d, %d, %d);"+
"-fx-background-color: -fx-background;",
rng.nextInt(256),
rng.nextInt(256),
rng.nextInt(256));
anchorPane.setStyle(style);
Label label = new Label("Pane "+(content.getChildren().size()+1));
AnchorPane.setLeftAnchor(label, 5.0);
AnchorPane.setTopAnchor(label, 5.0);
Button button = new Button("Remove");
button.setOnAction(evt -> content.getChildren().remove(anchorPane));
AnchorPane.setRightAnchor(button, 5.0);
AnchorPane.setTopAnchor(button, 5.0);
AnchorPane.setBottomAnchor(button, 5.0);
anchorPane.getChildren().addAll(label, button);
content.getChildren().add(anchorPane);
});
Scene scene = new Scene(new BorderPane(scroller, null, null, addButton, null), 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
另一种解决方案可能是使用ListView
。 (如果您要显示许多项目,这将是更可取的。)创建一个表示您在每个AnchorPane
中显示的项目的类和一个自定义列表单元格以显示它们。