Я новичок в JavaFX, и у меня была аналогичная проблема. У меня была AnchorPane, которая содержала BorderPane. Центр BorderPane содержал GridPane (gridPaneMaze). Этот gridPaneMaze использовал изображения ImageView [7] [7] для заполнения каждой ячейки моей сетки квадратным .png-файлом.
Я хотел, чтобы мои изображения изменялись с высотой окна. Поскольку я использовал квадраты, ширина столбца должна меняться автоматически.
Сначала, когда я изменил размер моего окна, мои столбцы были более широкими, чем мои изображения, а высота изображений была большой для строк.
После проб и ошибок я обнаружил, что это сделало трюк:
ИЗОБРАЖЕНИЯ У меня был сквозной ход между строками и столбцами, и в каждой ячейке я установил Imageview с соответствующим изображением (который всегда является квадратом) и использовал эту привязку высоты (я разделил высоту сетки на количество строк):
images[i][j].fitHeightProperty().bind(gridPaneMaze.heightProperty().divide(7));
images[i][j].setPreserveRatio(true);
Предполагаю, вы также можете использовать widthProperty и делить на Число столбцов. Но поскольку большинство мониторов имеют меньшую высоту, чем ширину, я использовал высоту.
GRIDPANE:
Я создал свою gridPane с помощью FXML, но это не имеет никакого значения для значений.
<BorderPane AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<center>
<GridPane fx:id="gridPaneMaze" centerShape="false" minHeight="0.0" minWidth="0.0" BorderPane.alignment="TOP_LEFT">
<columnConstraints>
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
<ColumnConstraints halignment="CENTER" />
</columnConstraints>
<rowConstraints>
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
<RowConstraints valignment="CENTER" />
</rowConstraints>
<children>
//...
</children>
<BorderPane.margin>
<Insets left="10.0" top="10.0" />
</BorderPane.margin>
</GridPane>
</center>
BORDERPANE: Я добавил пограничную рамку к своей привязке, поэтому я установил все якоря в «0».
GRIDPANE: имел minWidth 0 и minHeight 0. Я не устанавливал prefWidth, prefHeight, maxWidth или maxHeight.
ROWS: Я установил ничего, кроме вертикального выравнивания по центру (нет minHeight, prefHeight maxHeight )
COLUMNS: Я устанавливаю только горизонтальное выравнивание по центру (нет minWidth, prefWidth maxWidth)
Надеюсь, это поможет ...
Нет, поскольку Сотрудник
- это класс, который является ссылочным типом , а не типом значения .
Из MSDN :
Бокс - это процесс преобразования тип значения к объекту типа или к любой тип интерфейса, реализованный этим тип значения. Когда CLR помещает значение типа, он обертывает значение внутри System.Object и сохраняет его в удалось куча. Распаковка извлекает тип значения из объекта.
Вышеупомянутая ссылка MSDN содержит дополнительные примеры, которые должны помочь прояснить тему.
В приведенном выше примере нет, но иногда да.
Упаковка - это процесс «упаковки» типа значения в объект, на который можно ссылаться; ссылочный тип.В приведенном выше примере Employee уже является ссылочным типом, поэтому он не помещается в рамку, когда вы приводите его к IEntity.
Однако, если бы Employee был типом значения, например структурой (а не классом), тогда да.
Нет.
Поскольку emp1 является ссылочным типом.
Упаковка происходит, когда тип значения преобразуется в объект или тип интерфейса.
Нет, это не так.
Ваш экземпляр Employee уже является ссылочным типом. Типы ссылок хранятся в куче, поэтому их не нужно упаковывать / распаковывать.
Упаковка происходит только тогда, когда вы сохраняете тип значения в куче или, на языке MSDN, вы могли бы сказать:
Упаковка - это неявное преобразование Типы значений (справочник по C #) для типа объект или к любому типу интерфейса реализуется этим типом значения. Заниматься боксом тип значения выделяет объект экземпляр в куче и копирует значение в новый объект.
Упаковка означает преобразование типа значения в объект. Вы конвертируете ссылочный тип в другой ссылочный тип, поэтому это не упаковочное преобразование.
Нет, упаковка происходит при преобразовании типа значения в объект.