JavaFX View: есть ли разница между add и setConstraints? - PullRequest
0 голосов
/ 20 января 2020

Есть ли разница между add () или setConstraints, и поэтому да - это то, что есть, предпочтение или действительно большая разница?

public class example extends Application {


    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Example");
        GridPane grid = new GridPane();

        Label label = new Label("Example A");
        Label label2 = new Label("Example B");

        grid.add(label, 0,0);

        GridPane.setConstraints(label2, 1, 0);
        grid.getChildren().add(label2);

        Scene scene = new Scene(grid, 300,200);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

Ответы [ 3 ]

2 голосов
/ 20 января 2020

Реализация двух методов в GridPane классе:

/**
 * Adds a child to the gridpane at the specified column,row position.
 * This convenience method will set the gridpane column and row constraints
 * on the child.
 * @param child the node being added to the gridpane
 * @param columnIndex the column index position for the child within the gridpane, counting from 0
 * @param rowIndex the row index position for the child within the gridpane, counting from 0
 */
public void add(Node child, int columnIndex, int rowIndex) {
    setConstraints(child, columnIndex, rowIndex);
    getChildren().add(child);
}
/**
 * Sets the column,row indeces for the child when contained in a gridpane.
 * @param child the child node of a gridpane
 * @param columnIndex the column index position for the child
 * @param rowIndex the row index position for the child
 */
public static void setConstraints(Node child, int columnIndex, int rowIndex) {
    setRowIndex(child, rowIndex);
    setColumnIndex(child, columnIndex);
}

add метод добавляет дочерний элемент в область сетки в указанном столбце, позиции строки. setConstraints Устанавливает столбец, независимость строк для дочернего элемента, если он содержится в сетке.

setConstraints не добавляет дочерний элемент, но указывает, как он будет отображаться внутри GridPane.

1 голос
/ 20 января 2020

tl; dr

add добавляет узел и устанавливает его ограничения, в то время как setConstraints устанавливает ограничения только для Node, который был добавлен к GridPane ранее.

Из JavaDocs GridPane:

public void add(Node child,
                int columnIndex,
                int rowIndex)

Добавляет дочерний элемент в область сетки в указанном столбце в позиции строки. Этот удобный метод устанавливает ограничения столбца и строки сетки на дочернем элементе.

Параметры:
child - добавляемый узел к сетке
columnIndex - позиция индекса столбца для дочернего элемента в области сетки, считая от 0
rowIndex - позиция индекса строки для дочернего элемента в области сетки, считая от 0

Это означает, что полученное значение Node получает добавлен и будет выровнен в соответствии с заданными ограничениями.


public static void setConstraints(Node child,
                                  int columnIndex,
                                  int rowIndex,
                                  int columnspan,
                                  int rowspan)

Устанавливает значение столбца, строки, диапазона столбца и диапазона строки для дочернего элемента, если оно содержится в сетка.

Параметры:
child - дочерний узел сетки
columnIndex - позиция индекса столбца для дочернего элемента
rowIndex - позиция индекса строки для дочерний элемент
columnspan - количество столбцов, которое должен охватить дочерний элемент
rowspan - количество строк, которое должен охватить дочерний элемент

Хотя это означает, что вы устанавливаете constr aints Node, который уже является потомком GridPane или может быть добавлен к одному позже, но этот метод никогда не добавляет сам Node.

0 голосов
/ 20 января 2020

Я думаю, что вы все тут перепутали? setConstraints () устанавливает Layout для дочерних ограничений, тогда как add () просто добавляет дочерний объект к родителю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...