JavaCX TreeView TreeCell полная ширина - PullRequest
0 голосов
/ 11 января 2020

Здравствуйте, 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>

Как это выглядит:

enter image description here

Я пытался установить AnchorPane в PositionTreeCell, но это не сработало. У кого-нибудь есть идеи как это сделать sh?

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