Javafx 什么';在滚动窗格中添加一串按钮的最佳方式是什么?

Javafx 什么';在滚动窗格中添加一串按钮的最佳方式是什么?,javafx,javafx-2,scrollpane,Javafx,Javafx 2,Scrollpane,我对JavaFx有点陌生,对于我的应用程序,我需要在屏幕的一部分设置一组不确定的按钮。由于我不知道在程序启动之前需要多少按钮,我想在屏幕的这一部分设置一个滚动窗格,然后动态添加一组包含按钮的HBox(我使用按钮的列表和HBox的列表,因此我可以为每8个按钮创建一个新的HBox) 想法是使用滚动窗格在包含按钮的不同HBox之间滚动,因此我不需要总是显示所有按钮。问题是,您似乎无法将一组HBox直接添加到滚动窗格中。是否仍要执行此操作?我的代码将例如: public void startApp(in

我对JavaFx有点陌生,对于我的应用程序,我需要在屏幕的一部分设置一组不确定的按钮。由于我不知道在程序启动之前需要多少按钮,我想在屏幕的这一部分设置一个滚动窗格,然后动态添加一组包含按钮的HBox(我使用按钮的列表和HBox的列表,因此我可以为每8个按钮创建一个新的HBox)

想法是使用滚动窗格在包含按钮的不同HBox之间滚动,因此我不需要总是显示所有按钮。问题是,您似乎无法将一组HBox直接添加到滚动窗格中。是否仍要执行此操作?我的代码将例如:

public void startApp(int nDetect){   
    this.primaryStage = new Stage();
    this.nDetect = nDetect;
    BorderPane bp = new BorderPane();

    Group root = new Group();
    .
    .
    .
    LinkedList<Button> buttons = new LinkedList<>();
    LinkedList<HBox> boxes = new LinkedList<>();

    for(int i=0; i<this.nDetect; i++) {
        if(i%8 == 0){
            boxes.add(new HBox());
            boxes.get(i/8).setSpacing(5);
        }
        boxes.get(i/8).getChildren().add(buttons.get(i)) //add the button to the appropriate HBox
    }

    ScrollPane spane = new ScrollPane();

    for( HBox h : boxes){
        //add every element in "boxes" to the ScrollPane
    }
    bp.setTop(spane);
    root.getChildren().add(bp);
}
publicsvoidstartapp(int-ndetec){
this.primaryStage=新阶段();
this.ndetec=ndetec;
BorderPane bp=新的BorderPane();
组根=新组();
.
.
.
LinkedList按钮=新建LinkedList();
LinkedList Box=新建LinkedList();

对于(int i=0;iA
滚动窗格
包装另一个
节点
。只需制作一个
HBox
(或
VBox
),将其设置为滚动窗格的内容,并将所有
按钮添加到框中。框将自动缩放,滚动窗格将保持相同大小,但当内容超出其边界时,会自动绘制水平和/或垂直滑块。

听起来像是希望将按钮放置在滚动窗格的网格内

合适的布局应该是一个

导入javafx.application.application;
导入javafx.geometry.Insets;
导入javafx.scene.scene;
导入javafx.scene.control.*;
导入javafx.scene.layout.GridPane;
导入javafx.stage.stage;
滚动窗格中的公共类按钮行扩展应用程序{
每行专用静态最终双按钮=8;
专用静态最终双数字按钮行=8;
专用静态最终双按钮_PADDING=5;
@凌驾
公众假期开始(阶段){
GridPane grid=新建GridPane();
设置填充(新插入(按钮填充));
grid.setHgap(按钮填充);
网格设置间隙(按钮填充);
对于(int r=0;r
问题是我想将按钮按8行排列(始终至少有一行8个可见按钮,您必须向下滚动才能看到下一行8个)。将每个按钮添加到HBox,并将其添加到滚动窗格中,它会显示一行水平滚动条。然后您应该使用
网格窗格
,正如@jewelsea所建议的那样谢谢,就这么简单
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class ButtonLinesInScrollPane extends Application {

    private static final double BUTTONS_PER_LINE = 8;
    private static final double NUM_BUTTON_LINES = 8;
    private static final double BUTTON_PADDING   = 5;

    @Override
    public void start(Stage stage) {
        GridPane grid = new GridPane();
        grid.setPadding(new Insets(BUTTON_PADDING));
        grid.setHgap(BUTTON_PADDING);
        grid.setVgap(BUTTON_PADDING);

        for (int r = 0; r < NUM_BUTTON_LINES; r++) {
            for (int c = 0; c < BUTTONS_PER_LINE; c++) {
                Button button = new Button(r + ":" + c);
                grid.add(button, c, r);
            }
        }

        ScrollPane scrollPane = new ScrollPane(grid);

        stage.setScene(new Scene(scrollPane));
        stage.show();
    }

    public static void main(String[] args) { launch(args); }
}