专栏首页javafx框架tornadofxjavafx框架tornadofx实战-舒尔特3-增加从外部json文件导入内容功能
原创

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

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包体验

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 试用tagui,一个 Python 的自动化模块

    由于tagui在源码中设置了Chrome command为google-chrome,在使用前将google-chrome-stable拷贝为google-ch...

    用户6167008
  • javafx框架tornadofx入门25_treeview_显示不同的数据类型

    用户6167008
  • 使用javafx框架tornadofx做一个去掉字符串中的html标签的小工具

    部分网页由于禁止复制其内容,故采取查看源码再去掉其包含的html标签的方法来获得其内容。

    用户6167008
  • 微软计划使用 Rust 取代 C 和 C++

    近日,微软安全响应中心(MSRC)团队在官网更新文章,就近日提出的最新计划,即未来将使用 Rust 作为 C、C++ 以及其他编程语言的替代方案以改善应用程序的...

    新智元
  • ubuntu安装非移植QQ

    小柒吃地瓜
  • 向着网络强国阔步前行——党的十八大以来网信事业发展述评

    党的十八大以来,以习近平同志为核心的党中央坚持从发展中国特色社会主义、实现中华民族伟大复兴中国梦的战略高度,系统部署和全面推进网络安全和信息化工作。我国互联网发...

    安恒信息
  • Python|公交车最长时间问题

    公交车每天会按照一定间隔发车,由于不同时间段经过拥堵路段的用时不-样,所以给定路线下公交车每趟(每车次)行驶时间差异也很大,现在给出某路线某天各车次公交车离开始...

    算法与编程之美
  • 正则表达式入门

    有些知识,我们只需要付出一点点时间,把它掌握了,会大大提高我们的效率,节省我们的时间。正则表达式就是这样的知识,但是,作为入行好几年的我来说,正则表达式一直是一...

    我不是费圆
  • Java基础-JShell脚本工具

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    cwl_java
  • 大话测试数据(一)

    测试数据在整个测试过程中扮演着极为重要的角色,但是它却像个没有星象的演员,明明至少是男二号,但总是被观众忽略。在测试过程中,我们往往在测试计划阶段就忽略了测试数...

    小老鼠

扫码关注云+社区

领取腾讯云代金券