Kotlin TornadFX筛选器列表字符串超出范围

Kotlin TornadFX筛选器列表字符串超出范围,kotlin,tornadofx,Kotlin,Tornadofx,我正在尝试学习tornadofx,我遇到了一个错误,我不知道如何解决。很遗憾,我正在使用过滤器。虽然很有趣,但当我过滤数据时,错误处理程序告诉我,我有一个字符串超出范围,当我从文本字段中删除一个字符时,这种情况经常发生。我知道代码很混乱:D enter code hereclass CenterView : View("My View") { private val ExcelHandler: ExcelController by inject() private var content =

我正在尝试学习tornadofx,我遇到了一个错误,我不知道如何解决。很遗憾,我正在使用过滤器。虽然很有趣,但当我过滤数据时,错误处理程序告诉我,我有一个字符串超出范围,当我从文本字段中删除一个字符时,这种情况经常发生。我知道代码很混乱:D

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兼容,您需要使用可用的最新版本。请确认,并确保您的代码示例实际上是可运行的,即包括您引用的所有类。