Kotlin TornadFX筛选器列表字符串超出范围
我正在尝试学习tornadofx,我遇到了一个错误,我不知道如何解决。很遗憾,我正在使用过滤器。虽然很有趣,但当我过滤数据时,错误处理程序告诉我,我有一个字符串超出范围,当我从文本字段中删除一个字符时,这种情况经常发生。我知道代码很混乱:DKotlin TornadFX筛选器列表字符串超出范围,kotlin,tornadofx,Kotlin,Tornadofx,我正在尝试学习tornadofx,我遇到了一个错误,我不知道如何解决。很遗憾,我正在使用过滤器。虽然很有趣,但当我过滤数据时,错误处理程序告诉我,我有一个字符串超出范围,当我从文本字段中删除一个字符时,这种情况经常发生。我知道代码很混乱:D enter code hereclass CenterView : View("My View") { private val ExcelHandler: ExcelController by inject() private var content =
enter code hereclass CenterView : View("My View") {
private val ExcelHandler: ExcelController by inject()
private var content = mutableListOf<Products>().observable()
private var rowcounter = SimpleIntegerProperty()
private var oktorun = SimpleBooleanProperty(true)
val table = TableView<Products>()
val data = SortedFilteredList(content).bindTo(table)
private var Accounts = mutableListOf<String>().observable()
override val root = borderpane() {
bottom{
hbox(10) {
style{
padding = box(10.px)
alignment = Pos.CENTER
}
button("Import"){
addClass(Styles.btmDesign)
style{
backgroundColor += Color.PURPLE
fontFamily = "Comic Sans MS"
}
useMaxWidth = true
enableWhen(oktorun)
action {
oktorun.value = false
runAsync {
ExcelHandler.readExcel("data/test.xlsx")
} ui { loadedText ->
content.isEmpty()
content.addAll(loadedText.observable())
rowcounter.value = loadedText.count()
Accounts.addAll(loadedText.map { it.Account }.toList().distinct()
.observable())
oktorun.value = true
}
}
}
hbox{
label("Rows ")
{
style{
fontSize = 20.px
fontWeight = FontWeight.BOLD
}
}
label {
style{
fontSize = 20.px
fontWeight = FontWeight.BOLD
textFill = Color.GREEN
}
bind(rowcounter)
}
}
textfield {
promptText = "Filter"
data.filterWhen(textProperty()) { query, item ->
item.Account!!.contains(query, ignoreCase = true)
}
}
}
left{
listview(Accounts) {
style{
padding = box(20.px)
fontSize = 20.px
fontWeight = FontWeight.BOLD
}
}
}
center{
style{
prefWidth = 100.px
alignment = Pos.CENTER
padding = box(20.px)
}
tableview(data) {
isEditable = true
style{
fontSize =20.px
fontWeight = FontWeight.EXTRA_BOLD
}
column("External", Products::ExternalProperty)
column("ItemRelation", Products::ItemRelationProperty)
column("Account",Products::AccountProperty)
column("Price", Products::AmmountProperty)
column("currency", Products::ValutaProperty)
column("Date", Products::DateProperty)
column("Status", Products::StatusProperty)
enableDirtyTracking()
columnResizePolicy = SmartResize.POLICY
}.multiSelect(true)
}
right {
}
}
}
}
在此输入代码类中心视图:视图(“我的视图”){
私有val ExcelHandler:ExcelController by inject()
private var content=mutableListOf().observable()
私有变量rowcounter=SimpleIntegerProperty()
私有变量oktorun=SimpleBoleAnProperty(true)
val table=TableView()
val data=SortedFilteredList(内容).bindTo(表格)
私有var帐户=可变列表()可观察()
覆盖val root=borderpane(){
底部{
hbox(10){
风格{
填充=框(10.px)
对齐=位置中心
}
按钮(“导入”){
addClass(Styles.btmDesign)
风格{
背景颜色+=颜色。紫色
fontFamily=“Comic Sans MS”
}
useMaxWidth=true
启用时间(oktorun)
行动{
oktorun.value=false
运行异步{
readExcel(“data/test.xlsx”)
}ui{loadedText->
content.isEmpty()
content.addAll(loadedText.observable())
rowcounter.value=loadedText.count()
Accounts.addAll(loadedText.map{it.Account}.toList().distinct()
.observable())
oktorun.value=true
}
}
}
hbox{
标签(“行”)
{
风格{
fontSize=20.px
fontWeight=fontWeight.BOLD
}
}
标签{
风格{
fontSize=20.px
fontWeight=fontWeight.BOLD
textFill=Color.GREEN
}
绑定(行计数器)
}
}
文本字段{
promptext=“过滤器”
data.filterWhen(textProperty()){query,item->
item.Account!!.contains(查询,ignoreCase=true)
}
}
}
左{
列表视图(帐户){
风格{
填充=框(20.px)
fontSize=20.px
fontWeight=fontWeight.BOLD
}
}
}
居中{
风格{
预调宽度=100.px
对齐=位置中心
填充=框(20.px)
}
tableview(数据){
isEditable=true
风格{
fontSize=20.px
fontWeight=fontWeight.EXTRA_加粗
}
列(“外部”,产品::ExternalProperty)
列(“ItemRelation”,Products::ItemRelationProperty)
列(“帐户”,产品::AccountProperty)
列(“价格”,产品::AmmontProperty)
列(“货币”,产品::ValueTaProperty)
列(“日期”,Products::DateProperty)
列(“状态”,产品::状态属性)
enableDirtyTracking()
columnResizePolicy=SmartResize.POLICY
}.multiSelect(真)
}
对{
}
}
}
}
非常感谢您抽出时间
错误是
java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:
3位于java.lang.String.charAt(String.java:658)处
com.sun.glass.ui.win.WinTextRangeProvider.GetBounding矩形(WinTextRangeProvider.java:314)
在com.sun.glass.ui.win.WinApplication.\u runLoop(本机方法)
com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
运行(Thread.java:748)
您可能遇到了JavaFX错误。您使用的是哪个版本的JDK?嘿,谢谢,目前我使用的是8,目标是jvm 1.8,我对java也有点陌生:是的,我在JDK 8中使用了NetBeans,当我使用10时,我在apache poi中遇到了一些问题,我得到了java非法反射警告,所以我只是切换到了8 HMOk,现在我只是尝试使用java 10和它编译很好,但我无法启动它:owell我现在不知道TornadFX只与JDK8兼容,您需要使用可用的最新版本。请确认,并确保您的代码示例实际上是可运行的,即包括您引用的所有类。