Я не могу прагматично настроить GridPane в JavaFx

Я делаю проект JavaFx, связанный с хранилищем данных documentum. Мне нужно получить некоторые данные из хранилища данных, вставить и упорядочить их в табличной форме, в которой я использую GridPanes. Поскольку данные варьируются от одного объекта к другому, мне пришлось сделать свой код динамическим и использовать программный дизайн графического интерфейса. Что ж, нет проблем с получением данных и их загрузкой в ​​GridPane. Однако я столкнулся с некоторыми проблемами при разработке интерфейса этого GridPan. Я создал GridPane под названием «aclInfo» в моем файле FXML, и я пытаюсь создать внутри него новую GridPane. Следующий код, который я написал:

public void test ( ){
    aclInfo.getChildren().clear();

try{


    for (int i = 0 ; i <= listOfAcls.size() - 1 ; i ++ ){

        GridPane mainGridPane = new GridPane();

        mainGridPane.setStyle("-fx-grid-lines-visible: true");
        //mainGridPane.setStyle("-fx-background-color :red");


        RowConstraints row0 = new RowConstraints();
        RowConstraints row1 = new RowConstraints();
        row0.setMinHeight(20);
        row1.setMinHeight(32);

        mainGridPane.getRowConstraints().addAll(row0 , row1);


        ColumnConstraints mianCol0 = new ColumnConstraints();



        mianCol0.setMinWidth(911);


        mainGridPane.getColumnConstraints().addAll(mianCol0 );


        GridPane title = new GridPane ();
        ColumnConstraints col0 = new ColumnConstraints();
        ColumnConstraints col1 = new ColumnConstraints();
        ColumnConstraints col2 = new ColumnConstraints();
        col0.setMinWidth(303.66);
        col1.setMinWidth(303.66);
        col2.setMinWidth(303.66);
        title.getColumnConstraints().addAll(col0 , col1 , col2);


        //title.setStyle("-fx-grid-lines-visible: true");

        GridPane desc = new GridPane();
        RowConstraints descrow0 = new RowConstraints();
        RowConstraints descrow1 = new RowConstraints();
        descrow0.setMinHeight(20);
        descrow0.setMinHeight(22);

        desc.getRowConstraints().addAll(descrow0 , descrow1);


        ColumnConstraints desccol0 = new ColumnConstraints();
        ColumnConstraints desccol1 = new ColumnConstraints();
        ColumnConstraints desccol2 = new ColumnConstraints();
        desccol0.setMinWidth(303.66);
        desccol1.setMinWidth(303.66);
        desccol2.setMinWidth(303.66);

        desc.getColumnConstraints().addAll( desccol0, desccol1,desccol2);
        //desc.setStyle("-fx-background-color :red");
        desc.setStyle("-fx-grid-lines-visible: true");


        Text aclName = new Text(listOfAcls.get(0));
        Text roid = new Text ("r_object_id");
        Text rap = new Text ("r_accessor_permit");
        Text ran = new Text ("r_accessor_name");
        Text roidValue = new Text (holding.get(i).r_object_id);
        Text rapValue = new Text (holding.get(i).r_accessor_permit);
        Text ranValue = new Text (holding.get(i).r_accessor_name);





        title.add(aclName, 1, 0);
        title.setHalignment(aclName, HPos.CENTER);
        desc.add(roid , 0 , 0 );
        desc.setHalignment(roid, HPos.CENTER);
        desc.add(ran , 1 , 0 );
        desc.add(rap , 2 , 0 );
        desc.add(roidValue, 0 , 1);
        desc.add(rapValue, 1 , 1);
        desc.add(ranValue, 2 , 1);

        mainGridPane.add(title, 0, 0);
        mainGridPane.add(desc, 0, 1);
        aclInfo.add(mainGridPane, 0 , i);


    }




}catch(Exception e){
    Alert alert = new Alert (Alert.AlertType.ERROR , e.getLocalizedMessage());
    alert.showAndWait();
}

}
}

Мне не удается центрировать текст внутри GridPane .

Любая идея, где я делаю ошибку :)


person Danial Kosarifa    schedule 27.09.2016    source источник
comment
Будет хорошо, если вы сможете разместить весь код, потому что все восстановить сложно. Для 2 вы получаете свойство, но вам нужно установить свойство: aclInfo.setGridLinesVisible(true); и для 3 используйте также: aclName.setWrappingWidth(двойное значение) вы должны установить ширину для переноса   -  person BadVegan    schedule 27.09.2016
comment
@BadVegan Спасибо за ваш комментарий. Это было полезно. Но я столкнулся с другим вопросом. Когда я устанавливаю true в качестве аргумента setGridLinesVisible(), меня просят удалить этот аргумент. Однако, когда я использую css, он отлично работает. Любая идея, почему? ;)   -  person Danial Kosarifa    schedule 29.09.2016
comment
хм, я не знаю, как это возможно, GridPane gridpane = new GridPane(); gridpane.setGridLinesVisible (истина); если я объявляю что-то подобное, это работает, и я вижу строки   -  person BadVegan    schedule 29.09.2016
comment
@BadVegan Верно. Я по ошибке использовал другую похожую функцию — gridLinesVisible() вместо setGridLinesVisible() :)   -  person Danial Kosarifa    schedule 29.09.2016


Ответы (2)


Вы также можете установить выравнивание для всех столбцов:

ColumnConstraints desccol0 = new ColumnConstraints();
desccol0.setHalignment(HPos.CENTER);
ColumnConstraints desccol1 = new ColumnConstraints();
desccol0.setHalignment(HPos.CENTER);
ColumnConstraints desccol2 = new ColumnConstraints();
desccol0.setHalignment(HPos.CENTER);

или строка

 RowConstraints descrow1 = new RowConstraints();
 descrow1.setValignment(VPos.CENTER);

и у вас меньше кода

person BadVegan    schedule 29.09.2016

Ну, вот как выглядит окончательный рабочий код:

   public void test ( ){
    aclInfo.getChildren().clear();

try{


    for (int i = 0 ; i <= listOfAcls.size() - 1 ; i ++ ){

        GridPane mainGridPane = new GridPane();

        mainGridPane.setStyle("-fx-grid-lines-visible: true");
        //mainGridPane.setStyle("-fx-background-color :red");


        RowConstraints row0 = new RowConstraints();
        RowConstraints row1 = new RowConstraints();
        row0.setMinHeight(20);
        row1.setMinHeight(32);

        mainGridPane.getRowConstraints().addAll(row0 , row1);


        ColumnConstraints mianCol0 = new ColumnConstraints();



        mianCol0.setMinWidth(911);


        mainGridPane.getColumnConstraints().addAll(mianCol0 );


        GridPane title = new GridPane ();
        ColumnConstraints col0 = new ColumnConstraints();
        ColumnConstraints col1 = new ColumnConstraints();
        ColumnConstraints col2 = new ColumnConstraints();
        col0.setMinWidth(303.66);
        col1.setMinWidth(303.66);
        col2.setMinWidth(303.66);
        title.getColumnConstraints().addAll(col0 , col1 , col2);



        GridPane desc = new GridPane();
        RowConstraints descrow0 = new RowConstraints();
        RowConstraints descrow1 = new RowConstraints();
        descrow0.setMinHeight(20);
        descrow0.setMinHeight(22);

        desc.getRowConstraints().addAll(descrow0 , descrow1);


        ColumnConstraints desccol0 = new ColumnConstraints();
        ColumnConstraints desccol1 = new ColumnConstraints();
        ColumnConstraints desccol2 = new ColumnConstraints();
        desccol0.setMinWidth(303.66);
        desccol1.setMinWidth(303.66);
        desccol2.setMinWidth(303.66);

        desc.getColumnConstraints().addAll( desccol0, desccol1,desccol2);

        desc.setStyle("-fx-grid-lines-visible: true");


        Text aclName = new Text(listOfAcls.get(0));
        Text roid = new Text ("r_object_id");
        Text rap = new Text ("r_accessor_permit");
        Text ran = new Text ("r_accessor_name");
        Text roidValue = new Text (holding.get(i).r_object_id);
        Text rapValue = new Text (holding.get(i).r_accessor_permit);
        Text ranValue = new Text (holding.get(i).r_accessor_name);





        title.add(aclName, 1, 0);

        desc.add(roid , 0 , 0 );
        title.setHalignment(aclName, HPos.CENTER);
        desc.setHalignment(roid, HPos.CENTER);
        desc.setHalignment(ran, HPos.CENTER );
        desc.setHalignment(rap, HPos.CENTER );

        desc.setHalignment(roidValue, HPos.CENTER);
        desc.setHalignment(ranValue, HPos.CENTER );
        desc.setHalignment(rapValue, HPos.CENTER );


        desc.add(ran , 1 , 0 );
        desc.add(rap , 2 , 0 );
        desc.add(roidValue, 0 , 1);
        desc.add(rapValue, 1 , 1);
        desc.add(ranValue, 2 , 1);

        mainGridPane.add(title, 0, 0);
        mainGridPane.add(desc, 0, 1);
        aclInfo.add(mainGridPane, 0 , i);


    }




}catch(Exception e){
    Alert alert = new Alert (Alert.AlertType.ERROR , e.getLocalizedMessage());
    alert.showAndWait();
}

}
}
person Danial Kosarifa    schedule 29.09.2016