Что не так с порядком добавления элементов в GridPane? (JavaFX)

232
06 февраля 2018, 09:07

Здравствуйте. Есть метод, генерирующий аналог таблицы с использованием GridPane:

private GridPane createTable(ObservableList<String> headers, int matrix_size){
    GridPane table = new GridPane();
    table.getStyleClass().add("table_design");
    table.setGridLinesVisible(true);
    table.setVgap(0);
    ObservableList<Label> labels = FXCollections.observableArrayList();
    ObservableList<Label> labelsVertical = FXCollections.observableArrayList();
    for(int i = 0; i < matrix_size; i++){
        Label label = new Label(headers.get(i));
        label.setPadding(new Insets(0));
        label.getStyleClass().add("labels_headers");
        labels.add(label);
        Label labelVertical = new Label(headers.get(i));
        labelVertical.setPadding(new Insets(0));
        labelVertical.getStyleClass().add("labels_headers");
        labelsVertical.add(labelVertical);
    }
    TextField[][] textFields = new TextField[matrix_size][matrix_size];
    for(int i = 0; i < matrix_size; i++){
        for (int j = 0; j < matrix_size; j++){
            TextField textField = new TextField();
            if(i == j){
                textField.setText("1");
                textField.setEditable(false);
            }
            textField.setMinWidth(5);
            textField.setAlignment(Pos.CENTER);
            textFields[i][j] = textField;
        }
    }
    for(int i = 0; i < matrix_size; i++){
        for(int j = 0; j < matrix_size; j++){
            if(i == 0 && j == 0){
                continue;
            }
            if(i == 0){
                table.add(labels.get(j - 1), j, i);
                System.out.println("Label added to " + j + ", " + i);
                GridPane.setHalignment(labels.get(j - 1), HPos.CENTER);
                if(j == matrix_size - 1){
                    table.add(labels.get(j), j + 1, i);
                    System.out.println("Label added to " + (j + 1) + ", " + i);
                    GridPane.setHalignment(labels.get(j), HPos.CENTER);
                }
            }
            if(j == 0){
                table.add(labelsVertical.get(i - 1), j, i);
                System.out.println("LabelV added to " + j + ", " + i);
                if(i == matrix_size - 1){
                    table.add(labelsVertical.get(i), j, i + 1);
                    System.out.println("LabelV added to " + j + ", " + (i + 1));
                }
            }
            if(i != 0 && j != 0){
                table.add(textFields[i - 1][j - 1], j, i);
                System.out.println("TextField added to " + j + ", " + i);
                if(i == matrix_size - 1){
                    table.add(textFields[i][j - 1], j, i + 1);
                    System.out.println("TextField added to " + j + ", " + (i + 1));
                }
                if (j == matrix_size - 1) {
                    table.add(textFields[i - 1][j], j + 1, i);
                    System.out.println("TextField added to " + (j + 1) + ", " + i);
                }
                if(i == matrix_size - 1 && j == matrix_size - 1){
                    table.add(textFields[i][j], j + 1, i + 1);
                    System.out.println("TextField added to " + (j + 1) + ", " + (i + 1));
                }
            }
        }
    }
    return table;
}

Нужно, чтобы метки и текстовые поля добавлялись в таком порядке: метка, и до конца строки текстовые поля. Кроме первой строки, естественно. Работает корректно, за исключением того, что в последних двух строках порядок следующий: метка первой строки, метка второй строки, текстовое поле первой строки, текстовое поле второй строки и т. д., до конца итерации цикла. Никак не могу понять, почему?

READ ALSO
Массив и возращаемое значения в Java

Массив и возращаемое значения в Java

Есть метод которые обробатывают данные кладет их в несколька массивов и возращает двухмерный массивПроблема такая что нужно возратить два...

245
EntityManager получение нужного экземпляра entity

EntityManager получение нужного экземпляра entity

Например: есть AutoRepository, сущность Auto и его наследники Car и BusНужно, чтобы EntityManager возвращал результат запроса с экземплярами в зависимости от типа...

193
Использование Dribbble API

Использование Dribbble API

Не могу разобраться как использовать API сайта картинок DribbbleВот здесь вроде как написано о его использовании, но видимо до меня что-то не доходит

353