TornadoFX датагрид пуст

Итак, я следовал этому руководству, в котором рассказывается, как создать сетку данных в TornadoFX, и все работает отлично. Однако я хочу добавить несколько представлений в каждую ячейку моей таблицы данных, поэтому я хочу заменить область стека границей. Это ломает это. Ячейки все еще обнаруживаются, но они - пустые белые квадраты. Ни один из видов не появляется внутри. Я не совсем уверен, почему это происходит. Мне кажется, что cellFormat и cellCache действуют как циклы for-each, создавая графические элементы, описанные внутри них, для каждого элемента в списке ячеек, которые нуждаются в форматировании. Я не уверен, хотя. Таким образом, я действительно не уверен, как это исправить. Я действительно ценю, если кто-нибудь может помочь.

Код, который помещает зеленый круг и метку в каждый из белых квадратов:

    class DatagridDemo: View("Datagrid Demo") {

        val data = listOf("one", "two", "three")

        override val root = datagrid(data) {
            cellFormat {
                graphic = stackpane() {
                    circle(radius = 50.0) {
                        fill = Color.ALICEBLUE;
                    }
                    label(it);
                }
            }
        }

    }

Мой код:

    class DatagridDemo: View("Datagrid Demo") {

        val data = listOf("one", "two", "three")

        override val root = datagrid(data) {
            cellFormat {
                graphic = borderpane() {
//The widgets implement View()
                    top<TopWidget>();
                    bottom<BottomWidget>()
                    label(it);
                }
            }
        }

    }

1 ответ

Решение

При этом используются два пользовательских фрагмента для создания объектов, которые добавляются сверху и снизу.

class TopWidget(msg : String) : Fragment() {

    override val root = label(msg)
}

class BottomWidget(msg : String) : Fragment() {

    override val root = label(msg)
}

class DatagridDemo: View("Datagrid Demo") {

    val data = listOf("one", "two", "three")

    override val root = datagrid(data) {
        cellFormat {
            graphic = borderpane {
                top { add(TopWidget("Top ${it}")) }
                center { label(it) }
                bottom { add(BottomWidget("Bottom ${it}")) }
            }
        }
    }

}

class DGDemo : App(DatagridDemo::class)
Другие вопросы по тегам