javafx框架tornadofx实战-舒尔特6-增加导出舒尔特方格功能

December 17, 2023
测试
测试
测试
测试
3 分钟阅读

本节需要导入以下3个类:

import javafx.embed.swing.SwingFXUtils
import javafx.scene.SnapshotParameters
import javax.imageio.ImageIO

为了避免代码太多,本节将部分代码移动到控制器中,新建控制器类:

import tornadofx.*

class MainController: Controller(){
    val outPath= stringProperty(File("").absolutePath)  //导出目录,默认为当前目录
    val outNums= intProperty(5)     //导出目录次数
}

将控制器注入视图view中,在view中增加如下代码:

    private   val c by inject<MainController>()

新建设置视图,提供对相关参数进行设置的窗口

import javafx.scene.layout.Priority
import tornadofx.*

class SettingView : View("设置") {
    private val c by inject<MainController>()
    override val root = borderpane {
        center = vbox(5) {
            hbox(5) {
                label("导出目录:")
                textfield(c.outPath) {
                    hgrow = Priority.ALWAYS
                }
            }
            hbox(5) {
                label("导出次数:")
                combobox(c.outNums, (1..100 step 2).toList())
            }
        }

        setPrefSize(500.0, 500.0)
        paddingAll = 10.0
        style {
            fontSize = 16.px
        }
    }
}

在主视图view中的右侧增加一个drawer,用于显示设置视图:

    right = drawer {
            item<SettingView>()
        }

在“刷新”按钮右侧增加“导出”按钮:

button("导出") {
    action {
        (1..c.outNums.value).map {i->
            refreshGrid()
            val img = r.snapshot(SnapshotParameters(), null)
            ImageIO.write(SwingFXUtils.fromFXImage(img, null), "png", File(c.outPath.value+ "./schulteGrid$i.png"))
        }

        information("恭喜!成功导出 ${c.outNums.value} 张舒尔特方格。")
    }
}

可以将导出的舒尔特方格图片拷贝到word中打印出来给小朋友练习了

下载体验

手机APP体验

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多