Есть ли исправление для дублирующих вкладок при динамическом создании? - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь динамически создать панель вкладок, используя Tornadofx версии 1.7.18, и по какой-то причине вкладки дублируются.

У меня есть файл конфигурации, который загружается в приложение с изменяемыми значениями, так что программа следует принципам SOLID , в частности принципу открытого-закрытого типа. Я использую решение Javafx для добавления вкладок, вызывая tabpane.tabs.add() внутри цикла forEach.

Это упрощенная версия моей проблемы, но она все еще показывает проблему.

class Example: View() {
    private val tabList = List(3) {
        return@List it.toString()
    }

    override val root = tabpane()

    init {
        with(root) {
            tabClosingPolicy = TabPane.TabClosingPolicy.UNAVAILABLE

            tabList.forEach {
                this.tabs.add(
                    tab(it) {
                        label("Hello $it")
                    }
                )
            }
        }
    }
}

В результате обе вкладки «0» отображаются как выбранные. Окно выглядит так на компьютере с Windows:

+----------------+
|icon|    |-|[]|X|
+----------------+
||0|0|1|1|2|2|   |
+----------------+
|Hello 0         |
+----------------+

1 Ответ

1 голос
/ 29 апреля 2019

Проблема с вашим кодом в том, что вы используете конструктор tab() и затем добавляете результат в список вкладок.Абсолютно каждый сборщик в TornadoFX автоматически добавляет все, что он создает, к своему родителю, поэтому вам никогда не придется делать это вручную.

Каждый сборщик также возвращает все, что он создает, поэтому ваш код даже компилируется.Вы можете исправить свою ошибку, просто удалив окружающий вызов this.tabs.add(), например:

tabList.forEach {
    tab(it) {
        label("Hello $it")
    }
}

Для полноты, вот полный root-компоновщик, использующий лучшие практики:

override val root = tabpane {
    tabClosingPolicy = TabPane.TabClosingPolicy.UNAVAILABLE

    tabList.forEach {
        tab(it) {
            label("Hello $it")
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...