изменить размер массива с помощью выпадающего списка - PullRequest
0 голосов
/ 08 мая 2018

У меня есть двумерный массив кнопок, настроенный для создания сетки 6x6. У меня также есть поле со списком различных размеров, которые я хочу изменить массив при нажатии. Как мне это сделать?

            // Initializing 2D buttons with values i,j
            btn[i][j] = button;
            button.setPrefSize(35, 40);
            gridPane.add(button, i, j);
            button.setDisable(false);
        }
    }

    final ComboBox cb = new ComboBox();
    cb.getItems().addAll(
        "4x4",
        "6x6",
        "8x8",
        "10x10" 
    );

    gridPane.add(cb, 11, 2);

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете поместить все необходимое для заполнения gridpane в метод и вызывать его при изменении combobox (я создал init() просто для того, чтобы иметь место для кода).

Добавьте listener на ComboBox и получите текст при изменении значения, возьмите 2 ints и передайте их методу, который обновит

final List<String> values = Arrays.asList("", "X", "O");
final GridPane gridPane /* = */:
final ComboBox<String> cb = new ComboBox<>();

public void init() {
    addButtonToGrid(6, 6);
    cb.getItems().addAll("4x4", "6x6", "8x8", "10x10");
    cb.valueProperty().addListener((observable, oldValue, newValue) -> {
        String[] size = newValue.split("x");
        addButtonToGrid(Integer.parseInt(size[0]),Integer.parseInt(size[1]));
    });
}

private void addButtonToGrid(int sizeR, int sizeC) {
    gridPane.getChildren().clear();
    for (int i = 0; i < sizeC; i++) {
        for (int j = 0; j < sizeR; j++) {
            final Button button = new Button("");
            button.setOnAction(event -> {
                int valueIndex = values.indexOf(button.getText());
                button.setText(values.get((valueIndex + 1) % values.size()));
            });
            button.setPrefSize(35, 40);
            gridPane.add(button, i, j);
            button.setDisable(false);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...