Здравствуйте, stackoverflow,
Я разрабатываю приложение в kotlin с помощью javafx. И для этого мне нужно TreeView с пользовательским представлением TreeCell. Моя проблема в том, что контент TreeCell всегда остается (см. Рисунок ниже). Я пытаюсь сделать так, чтобы содержимое TreeCell растягивалось слева направо. (Как в AnchorPane.leftAnchor = 0 и AnchorPane.rightAnchor = 0)
F xml выглядит так:
<VBox prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/10.0.2-internal"
xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.bli.bla.blu.conrollers.MyController">
<TreeView fx:id="treeView" showRoot="false" VBox.vgrow="ALWAYS">
</TreeView>
</VBox>
в контроллере, который я вызываю:
treeView?.setCellFactory { PositionTreeCell() }
PositionTreeCell:
class PositionTreeCell : TreeCell<PositionEntryController>() {
override fun updateItem(item: PositionEntryController?, empty: Boolean) {
super.updateItem(item, empty)
if (empty || item == null) {
text = null
graphic = null
contextMenu = null
} else {
text = null
graphic = getPositionTreeCellGraphic(item)
contextMenu = null
}
}
private fun getPositionTreeCellGraphic(item: PositionEntryController): Node? {
if (item is TypeA) {
val loader = FXMLLoader()
loader.resources = ResourceBundle.getBundle("Resources", Locale.getDefault())
loader.setControllerFactory {
item
}
val parent = loader.load<Parent>(javaClass.getResourceAsStream("/fxml/typeA.fxml"))
return parent
} else if (item is TypeB)
return TODO()
else
return null
}
}
Пользовательский шаблон в f xml:
<GridPane gridLinesVisible="true" prefHeight="20.0" prefWidth="800" xmlns="http://javafx.com/javafx/10.0.2-internal"
xmlns:fx="http://javafx.com/fxml/1"
fx:controller="de.bli.bla.blu.conrollers.PositionDefinitionController">
<Label fx:id="keyLabel"/>
<Label fx:id="positionNameLabel" GridPane.columnIndex="1"/>
<Label fx:id="piecePriceLabel" GridPane.columnIndex="2"/>
<Label fx:id="unitLabel" GridPane.columnIndex="3"/>
<columnConstraints>
<ColumnConstraints maxWidth="100"/>
<ColumnConstraints/>
<ColumnConstraints maxWidth="100"/>
<ColumnConstraints maxWidth="50"/>
</columnConstraints>
<rowConstraints>
<RowConstraints/>
</rowConstraints>
</GridPane>
Как это выглядит:
Я пытался установить AnchorPane в PositionTreeCell, но это не сработало. У кого-нибудь есть идеи как это сделать sh?