前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >javafx框架tornadofx实战-舒尔特3-增加从外部json文件导入内容功能

javafx框架tornadofx实战-舒尔特3-增加从外部json文件导入内容功能

原创
作者头像
用户6167008
修改2020-06-09 17:17:35
1K0
修改2020-06-09 17:17:35
举报

json文件content1.json格式:

[
  {
    "title": "大写汉字数字",
    "content": "零,壹,贰,叁,肆,伍,陆,柒,捌,玖,拾,佰,仟"
  },
  {
    "title": "大写英文数字",
    "content": "one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirtheen,fourtheen,fifteen,sixteen"
  }
]

在顶部增加“加载文件”按键,定义 _chooseFile()函数来加载外部json文件:

button("加载文件") {
    action {
        _chooseFile()
    }
}

_chooseFile()函数:

private fun _chooseFile() {
    val fileType = listOf("*.json", "*.txt")
    val efset = arrayOf(FileChooser.ExtensionFilter("$fileType", fileType))
    val fileschoosed = chooseFile("选择文件", efset, mode = FileChooserMode.Single) {
        // p初始目录为当前项目目录
        initialDirectory = File(File("").canonicalPath)
    }
    if (fileschoosed.isNotEmpty()) {
        _init(fileschoosed.first().toURI().toURL())
    }
}

定义_init(filePath:URL)函数,通过tornadofx提供的loadJsonArray方法,将 "title"和 "content"存入一个map中,由于map的keys是无顺序的,为了保证左侧listview中的内容与json文件中的内容的顺序一致,同时将 "title"添加到types变量中,见如下代码:

//存放 "title"和 "content"的map
    private val typeMap = observableMapOf<String, String>()

    private fun _init(filePath:URL){
        types.clear()
        typeMap.clear()
        types.add("数字")//不论加载什么内容,将"数字"和"自定义"保留为默认项
        loadJsonArray(filePath).map {
            val obj = it.asJsonObject()
            types.add(obj.getString("title"))//每次添加一项,能保证types中的顺序与json文件中的一致
            typeMap.put(obj.getString("title"), obj.getString("content"))
        }
        // types.addAll(typeMap.keys)//此种方式会打乱顺序
        types.add("自定义")
    }

下载jar包体验

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • json文件content1.json格式:
  • 在顶部增加“加载文件”按键,定义 _chooseFile()函数来加载外部json文件:
  • _chooseFile()函数:
  • 定义_init(filePath:URL)函数,通过tornadofx提供的loadJsonArray方法,将 "title"和 "content"存入一个map中,由于map的keys是无顺序的,为了保证左侧listview中的内容与json文件中的内容的顺序一致,同时将 "title"添加到types变量中,见如下代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档