gpt4 book ai didi

swing - 从 Scala + Swing 应用程序返回一个值

转载 作者:行者123 更新时间:2023-12-01 07:47:51 26 4
gpt4 key购买 nike

我有一个非常简单的 scala swing 应用程序,我想从触发 Swing 应用程序的地方向命令行应用程序返回一个值。如果我选择值“b”,我希望 GUI 在按下按钮后立即将值“b”返回给我。如何让应用等待正确的用户输入以及如何将值返回给调用应用?

import swing._
import event.{ButtonClicked}
object GuiDemo extends App {

object GUI extends SimpleSwingApplication {
val button = new Button {
text = "Go!"
}

val comboBox = new ComboBox(List("a", "b", "c"))
def top = new MainFrame {
contents = new FlowPanel {
contents += comboBox
contents += button
}
}

listenTo(button)

reactions += {
case ButtonClicked(`button`) => {
val selection = comboBox.item
button.enabled_= (false)
}
}
}

println("Before starting the GUI")
GUI.main(args)
val myValue = GUI.comboBox.item
println("""Now I need to make a complicated transformation in scala
with the selected value: """ + myValue.map(_.toUpper) )
// how do I get the selected value from the GUI?
}

谢谢!

编辑:目前我没有把它包装到 jar 里。只需编译它然后用 scala 运行它...

我需要将选定的值从“GUI”返回到“GuiDemo”scala 应用程序,以便在 scala 中做一些进一步的处理。

所以真正的问题是:

如何等待 GUI 部分完成,然后将所选值返回(移交给)GuiDemo

最佳答案

一旦您访问 AWT/Swing,它就会启动事件分派(dispatch)线程,应用程序将继续运行。因此,当用户从中填写 GUI 时,返回终端所需要做的就是退出应用程序。

我想,要“将值返回到命令行应用程序”,那将是将内容打印到控制台。所以:

reactions += {
case ButtonClicked(`button`) =>
val selection = comboBox.item
Console.out.println(selection)
sys.exit(0)
}

注意不需要嵌套两个对象(GuiDemoGUI),只用一个:

import swing._

object GuiDemo extends SimpleSwingApplication {
lazy val top = new MainFrame {
val comboBox = new ComboBox(List("a", "b", "c"))
val button = Button("Go!") {
val selection = comboBox.item
Console.out.println(selection)
sys.exit(0)
}

contents = new FlowPanel(comboBox, button)
}
}

如果您通过解释器执行它,使用 scala GuiDemo.scala,您需要通过在文件末尾添加以下行来显式调用 main 方法:

GuiDemo.main(null)

关于swing - 从 Scala + Swing 应用程序返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17282622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com