Как лучше всего добавить кучу кнопок в панель прокрутки?

Я новичок в JavaFx, для моего приложения мне нужно установить неопределенный набор кнопок на часть экрана. Поскольку я не знаю, сколько кнопок мне понадобится, пока программа не запустится, я решил установить ScrollPane в эту часть экрана и добавить туда динамически кучу HBox , содержащий кнопки (я использую список‹> кнопок и список‹> HBox, поэтому я могу создать новый HBox для каждых 8 кнопок).

Идея состоит в том, чтобы использовать ScrollPane для прокрутки между различными HBox, содержащими кнопки, поэтому мне не нужно всегда показывать все кнопки. Проблема в том, что кажется, что вы не можете напрямую добавить кучу HBox в ScrollPane. Есть ли способ это сделать?? Мой код будет примерно таким:

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);
}

person Juan    schedule 23.03.2015    source источник


Ответы (2)



ScrollPane оборачивает другой Node. Просто сделайте один HBox (или VBox), установите его как содержимое панели прокрутки и добавьте все Button в поле. Окно будет масштабироваться автоматически, а область прокрутки останется того же размера, но автоматически отобразит горизонтальные и/или вертикальные ползунки по мере того, как содержимое выходит за его границы.

person Warkst    schedule 23.03.2015
comment
Проблема в том, что я хочу организовать кнопки в строках по 8 (всегда будет как минимум строка из 8 видимых кнопок, и вам нужно прокрутить вниз, чтобы увидеть следующую строку из 8). Добавляя каждую кнопку в HBox, а это в ScrollPane, она показывает одну строку с горизонтальной прокруткой. - person Juan; 23.03.2015
comment
Тогда вам следует использовать GridPane, как предложил @jewelsea. - person Warkst; 24.03.2015