Переходы прокрутки TreeView при использовании больших графических узлов (TornadoFX / JavaFX) - PullRequest
0 голосов
/ 13 октября 2019

В следующем коде TornadoFX / Kotlin

import javafx.scene.control.TreeItem
import javafx.scene.control.TreeView
import tornadofx.*

class MyObj {

    var type : Int = 0

    constructor(type : Int) {

        this.type = type
    }
}

class MainView: View("Minimal TV demo") {

    var treeRoot : TreeItem<MyObj> = TreeItem()
    var objectsTreeView : TreeView<MyObj>? = null

    override val root = vbox {

        objectsTreeView = treeview(treeRoot) {

            showRootProperty().value = false

            cellFormat {

                if(it.type == 0) {

                    text = "Test"
                    graphic = null
                }
                else {

                    text = null
                    graphic = vbox {

                        label("Label 1")
                        button("123")
                        textarea {

                                prefWidth = 100.0
                                prefHeight = 125.0
                        }
                    }
                }
            }
        }
    }

    init {

        with (root) {

            for(i in 1..10) {

                val x = TreeItem(MyObj(0))
                treeRoot.children.add(x)

                x.children.add(TreeItem(MyObj(1)))
            }
        }
    }
}

при открытии нескольких элементов дерева и прокрутке представления дерева содержимое представления дерева и ползунок, кажется, действуют довольно «нервно», то есть когда ясдвиньте ползунок вниз, мышь перемещается, но ползунок и содержимое остаются на своем месте, пока мышь не опустится так далеко, а затем содержимое перепрыгнет. Это просто не ощущается и не выглядит хорошо.

Я думаю, что я мог бы обойти это, добавив отдельные TreeItem для каждой строки элемента пользовательского интерфейса, но есть ли способ добиться плавной прокрутки без этого? Я пытался подать в суд на фиксированную высоту ячейки, что, кажется, работает, но, конечно, это не совсем правильно, учитывая, что некоторые строки короче других.

1 Ответ

2 голосов
/ 13 октября 2019

Не используйте cellFormat для сложных древовидных интерфейсов, поскольку элементы будут воссозданы очень быстро и, скорее всего, вызовут мерцание. Лучше всего создать подкласс TreeCellFragment и настроить его с помощью вызова cellFragment.

Теперь вы можете создавать пользовательский интерфейс только один раз для каждой ячейки дерева и повторно использовать его, когда изменяемые данные. Это намного эффективнее.

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