Является ли приведение к интерфейсу преобразованием бокса?

Я новичок в 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)

Надеюсь, это поможет ...

13
задан Hemanshu Bhojak 23 June 2010 в 13:20
поделиться

6 ответов

Нет, поскольку Сотрудник - это класс, который является ссылочным типом , а не типом значения .

Из MSDN :

Бокс - это процесс преобразования тип значения к объекту типа или к любой тип интерфейса, реализованный этим тип значения. Когда CLR помещает значение типа, он обертывает значение внутри System.Object и сохраняет его в удалось куча. Распаковка извлекает тип значения из объекта.

Вышеупомянутая ссылка MSDN содержит дополнительные примеры, которые должны помочь прояснить тему.

18
ответ дан 1 December 2019 в 19:39
поделиться

В приведенном выше примере нет, но иногда да.

Упаковка - это процесс «упаковки» типа значения в объект, на который можно ссылаться; ссылочный тип.В приведенном выше примере Employee уже является ссылочным типом, поэтому он не помещается в рамку, когда вы приводите его к IEntity.

Однако, если бы Employee был типом значения, например структурой (а не классом), тогда да.

9
ответ дан 1 December 2019 в 19:39
поделиться

Нет.

Поскольку emp1 является ссылочным типом.

Упаковка происходит, когда тип значения преобразуется в объект или тип интерфейса.

2
ответ дан 1 December 2019 в 19:39
поделиться

Нет, это не так.

Ваш экземпляр Employee уже является ссылочным типом. Типы ссылок хранятся в куче, поэтому их не нужно упаковывать / распаковывать.

Упаковка происходит только тогда, когда вы сохраняете тип значения в куче или, на языке MSDN, вы могли бы сказать:

Упаковка - это неявное преобразование Типы значений (справочник по C #) для типа объект или к любому типу интерфейса реализуется этим типом значения. Заниматься боксом тип значения выделяет объект экземпляр в куче и копирует значение в новый объект.

0
ответ дан 1 December 2019 в 19:39
поделиться

Упаковка означает преобразование типа значения в объект. Вы конвертируете ссылочный тип в другой ссылочный тип, поэтому это не упаковочное преобразование.

0
ответ дан 1 December 2019 в 19:39
поделиться

Нет, упаковка происходит при преобразовании типа значения в объект.

0
ответ дан 1 December 2019 в 19:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: