https://ask.qcloudimg.com/draft/6167008/73y1k5cjic.gif
- import com.jfinal.kit.Kv
- import com.jfinal.template.Engine
- import javafx.scene.layout.GridPane
- import tornadofx.*
- import kotlin.Exceptionimport kotlin.math.pow
- import kotlin.math.sqrt
- class EnjoyApp : App(EnjoyView::class, MyStyle::class)
- class EnjoyView : View("计算器") {
- val engine = Engine.use().setEncoding("utf-8")
- .setDevMode(true)
- private val kv = Kv.create()
- val strOut = stringProperty()
- val history = stringProperty("")
- val strIn = stringProperty("")
- var gp: GridPane by singleAssign()
- override val root = borderpane {
- paddingAll = 10.0
- top = vbox(5) {
- hbox {
- label("式子:")
- textfield(strIn) {
- text = "1+1*8-789/654"
- }
- }
- hbox {
- label("结果:")
- textfield(strOut) {
- isEditable = false
- }
- }
- paddingBottom = 10.0
- }
- center = hbox(10) {
- gp = gridpane {
- hgap = 2.0
- vgap = 2.0
- }
- textarea(history) { }
- }
- }
- init {
- val nums = listOf("%", "√", "x²", "1/x", ")", "C", "Del", "÷", "7", "8", "9", "*", "4", "5", "6", "-", "1", "2", "3", "+", "(", "0", ".", "=")
- var i = 0
- (0..5).forEach { r ->
- (0..3).forEach { c ->
- gp.add(button("${nums[i]}") {
- setPrefSize(65.0, 65.0)
- action {
- when (text) {
- "=" -> {
- strOut.value = renderStr(strIn.value, kv)
- addHistory(text)
- }
- "Del" -> strIn.value = strIn.value.dropLast(1)
- "C" -> clear()
- "÷" -> strIn.value = strIn.value.plus("/")
- "√" -> {
- strOut.value = sqrt(renderStr(strIn.value, kv).toDouble()).toString()
- addHistory(text)
- }
- "x²" -> {
- strOut.value = (renderStr(strIn.value, kv).toDouble().pow(2)).toString()
- addHistory(text)
- }
- "1/x" -> {
- strOut.value = (renderStr(strIn.value, kv).toDouble().pow(-1)).toString()
- addHistory(text)
- }
- else -> strIn.value = strIn.value.plus(text)
- }
- }
- }, c, r)
- i++
- }
- }
- }
- private fun addHistory(operator:String) {
- when(operator){
- "="->{
- if (!strOut.value.isNullOrEmpty())
- history.value += strIn.value.plus("=").plus(strOut.value).plus("\n\n")
- }
- "1/x"->{
- if (!strOut.value.isNullOrEmpty())
- history.value +="1/(" +strIn.value.plus(")=").plus(strOut.value).plus("\n\n")
- }
- "x²"->{
- if (!strOut.value.isNullOrEmpty())
- history.value += "(" +strIn.value.plus(")²=").plus(strOut.value).plus("\n\n")
- }
- "√"->{
- if (!strOut.value.isNullOrEmpty())
- history.value +="sqrt(" + strIn.value.plus(")=").plus(strOut.value).plus("\n\n")
- }
- }
- clear()
- }
- private fun clear() {
- strOut.value = ""
- strIn.value = ""
- }
- private fun renderStr(inStr: String, kv: Kv): String {
- var result = ""
- if (inStr.isNotEmpty()) {
- try {
- result = engine.getTemplateByString("#($inStr)").renderToString(kv)
- } catch (e: Exception) {
- information("请输入正确的计算式子")
- }
- } else {
- result = ""
- }
- return result
- }
- }
- class MyStyle : Stylesheet() {
- init {
- s(label, textField, button) {
- fontSize = 20.px }
- }}