Can';不要将fontawesomefx与kotlin和tornadofx一起使用

Can';不要将fontawesomefx与kotlin和tornadofx一起使用,kotlin,tornadofx,Kotlin,Tornadofx,我正在尝试使用TornadoFX创建一些带有FontAwesomeFX图标的JavaFX按钮。这是密码 data class ButtonInfo(val texto: String, val icon: GlyphIcon<*>) val list = listOf( ButtonInfo("Cadastro", FontAwesomeIconView(FontAwesomeIcon.ADDRESS_BOOK)), ButtonIn

我正在尝试使用TornadoFX创建一些带有FontAwesomeFX图标的JavaFX按钮。这是密码

    data class ButtonInfo(val texto: String, val icon: GlyphIcon<*>)

    val list = listOf(
        ButtonInfo("Cadastro", FontAwesomeIconView(FontAwesomeIcon.ADDRESS_BOOK)),
        ButtonInfo("Corrida", MaterialDesignIconView(MaterialDesignIcon.RUN)),
        ButtonInfo("Classificacao", FontAwesomeIconView(FontAwesomeIcon.LIST)))

    list.forEach {
        it.icon.size = "3em"
        val bt = Button(it.texto, it.icon)
        bt.contentDisplay = ContentDisplay.TOP
        bt.minWidth = 200.0
        root += bt
    }

我没有得到上面提到的错误,但我缺少“.size”属性。如何声明我的类“ButtonInfo”以使此代码正常工作?

您没有发布完整的类,但看起来您试图在任何方法或init块之外运行
列表.forEach
指令?Kotlin被
size
访问器弄糊涂了,请使用
setSize()
来避免这个问题

这是一个完整的类,对编译和运行的示例进行了最小的更改,并显示了vbox中的图标

data class ButtonInfo(val texto: String, val icon: GlyphIcon<*>)

class IconView : View() {
    val list = listOf(
            ButtonInfo("Cadastro", FontAwesomeIconView(FontAwesomeIcon.ADDRESS_BOOK)),
            ButtonInfo("Corrida", MaterialDesignIconView(MaterialDesignIcon.RUN)),
            ButtonInfo("Classificacao", FontAwesomeIconView(FontAwesomeIcon.LIST)))

    override val root = vbox {
        list.forEach {
            it.icon.setSize("3em")
            button(it.texto, it.icon) {
                contentDisplay = ContentDisplay.TOP
                minWidth = 200.0
            }
        }
    }
}
然后在实用程序文件中定义此函数:

fun Button.icon(icon: GlyphIcons, minButtonWidth: Double = 200.0) {
    graphic = when (icon) {
        is FontAwesomeIcon -> FontAwesomeIconView(icon)
        is MaterialDesignIcon -> MaterialDesignIconView(icon)
        else -> throw IllegalArgumentException("Unknown font family ${icon.fontFamily}")
    }
    with(graphic as GlyphIcon<*>) {
        contentDisplay = ContentDisplay.TOP
        setSize("3em")
    }
    minWidth = minButtonWidth
}
fun按钮图标(图标:GlyphIcons,minButtonWidth:Double=200.0){
图形=何时(图标){
是FontAwesomeIcon->FontAwesomeIconView(图标)
是MaterialDesignIcon->MaterialDesignIconView(图标)
else->抛出IllegalArgumentException(“未知字体系列${icon.fontFamily}”)
}
带有(图形作为图示符图标){
contentDisplay=contentDisplay.TOP
设置大小(“3em”)
}
最小宽度=最小按钮宽度
}
这使得查看呼叫站点上发生的事情变得更加容易


另外,
setSize(“3em”)
仅用于支持场景生成器。考虑使用<代码> GyPHiste< /Cord>访问器。< /P>哇。没有什么比这更能让首席程序员回答的了!我与kotlin和tornadofx有初步联系。所以,我不知道解决问题的最佳方法。无论如何,非常感谢!!!很乐意帮助:)继续提问,在这里获得更多关于TornadoFX的信息很好,所以!
data class ButtonInfo(val texto: String, val icon: Text)
data class ButtonInfo(val texto: String, val icon: GlyphIcon<*>)

class IconView : View() {
    val list = listOf(
            ButtonInfo("Cadastro", FontAwesomeIconView(FontAwesomeIcon.ADDRESS_BOOK)),
            ButtonInfo("Corrida", MaterialDesignIconView(MaterialDesignIcon.RUN)),
            ButtonInfo("Classificacao", FontAwesomeIconView(FontAwesomeIcon.LIST)))

    override val root = vbox {
        list.forEach {
            it.icon.setSize("3em")
            button(it.texto, it.icon) {
                contentDisplay = ContentDisplay.TOP
                minWidth = 200.0
            }
        }
    }
}
class IconView : View() {
    override val root = vbox {
        button("Cadastro").icon(FontAwesomeIcon.ADDRESS_BOOK)
        button("Corrida").icon(MaterialDesignIcon.RUN)
        button("Classificacao").icon(FontAwesomeIcon.LIST)
    }
}
fun Button.icon(icon: GlyphIcons, minButtonWidth: Double = 200.0) {
    graphic = when (icon) {
        is FontAwesomeIcon -> FontAwesomeIconView(icon)
        is MaterialDesignIcon -> MaterialDesignIconView(icon)
        else -> throw IllegalArgumentException("Unknown font family ${icon.fontFamily}")
    }
    with(graphic as GlyphIcon<*>) {
        contentDisplay = ContentDisplay.TOP
        setSize("3em")
    }
    minWidth = minButtonWidth
}