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

2020-06-15 14:35:50 浏览数 (1)

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

代码语言:txt复制
import javafx.embed.swing.SwingFXUtils
import javafx.scene.SnapshotParameters
import javax.imageio.ImageIO

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

代码语言:txt复制
import tornadofx.*

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

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

代码语言:txt复制
    private   val c by inject<MainController>()

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

代码语言:txt复制
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,用于显示设置视图:

代码语言:txt复制
    right = drawer {
            item<SettingView>()
        }

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

代码语言:txt复制
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体验

0 人点赞