我正在尝试使用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
}
Run Code Online (Sandbox Code Playgroud)
在编译中我得到这个错误:
Type parameter bound for T in var <T : Enum<T!>!> GlyphIcon<T>.size: String! where T : GlyphIcons!
Run Code Online (Sandbox Code Playgroud)
不满意:推断类型CapturedTypeConstructor(*)不是GlyphIcons的子类型!
GlyphIcon是一个带有此声明的Java抽象类:
public abstract class GlyphIcon<T extends Enum<T> & GlyphIcons> extends Text
Run Code Online (Sandbox Code Playgroud)
我不知道怎么扭转这个错误.如果我宣布:
data class ButtonInfo(val texto: String, val icon: Text)
Run Code Online (Sandbox Code Playgroud)
我没有得到上面提到的错误,但我想念'.size'属性.我如何声明我的类'ButtonInfo'以便这段代码有效?
您没有发布完整的类,但看起来您尝试list.forEach
在任何方法或init块之外运行指令?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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我使用button
构建器而不是手动添加到根节点.
让我提供一个替代方案:
class IconView : View() {
override val root = vbox {
button("Cadastro").icon(FontAwesomeIcon.ADDRESS_BOOK)
button("Corrida").icon(MaterialDesignIcon.RUN)
button("Classificacao").icon(FontAwesomeIcon.LIST)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在实用程序文件中定义此函数:
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
}
Run Code Online (Sandbox Code Playgroud)
它可以更容易地看到呼叫站点发生了什么.
此外,setSize("3em")
只有支持Scene Builder.请考虑使用glyphSize
访问者.
归档时间: |
|
查看次数: |
525 次 |
最近记录: |