【问题标题】:How to modify text field contents in reaction to button click in Scala Swing?如何修改文本字段内容以响应 Scala Swing 中的按钮单击?
【发布时间】:2013-06-30 16:36:48
【问题描述】:

我的对话窗口由一个文本字段和一个按钮组成。我希望在每次单击按钮(*)时将任意字符串放置在文本字段中。我面临的问题是如何通知文本字段发生了这样的事件?

我尝试在每次单击按钮时发布自定义消息,但我的文本字段似乎根本没有对此类消息作出反应,即使我已使用 listenTo 对其进行配置。

这是一个(非)工作的最小示例,描述了我迄今为止不成功的斗争:

import swing._
import swing.event._

case class SomethingHappened extends Event {
  println("Yes, something indeed has been published!")
}

class MyDialog extends Dialog {
  contents = new BoxPanel(Orientation.Vertical) {
    val myButton = Button("Click me and something will happen!") {
      publish(SomethingHappened())
    }
    contents += new TextField {
      listenTo(myButton)
      reactions += {
        case SomethingHappened() =>
          // This actually never happens... :(
          peer.setText("Voilà!")
          println("You didn't expect it coming, did you?")
      }
    }
    contents += myButton
  }
  open()
}

new MyDialog()

在这里非常感谢您的帮助。谢谢!

(*) “按钮单击”是更复杂事件的占位符,此处仅用于简化目的(鉴于,ButtonClicked 不是我想要的,我需要定义并发布一个真正的自定义事件)。另一方面,更新文本字段内容仍然是“点击”的期望结果。

【问题讨论】:

    标签: swing scala events jbutton jtextfield


    【解决方案1】:

    myButton 上尝试publish

    val myButton: Button = Button("Click me and something will happen!") {
      println(this)
      myButton.publish(SomethingHappened())
    }
    

    this 在这种情况下指的是BoxPanel:该块不是Button 类的方法,它作为参数传递给它。

    【讨论】:

    • 太棒了!奇迹般有效!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    相关资源
    最近更新 更多