gpt4 book ai didi

java - 如何为 javax.swing.Timer 编写 Scala 包装器

转载 作者:行者123 更新时间:2023-12-02 19:56:30 24 4
gpt4 key购买 nike

我想在 Scala Swing 应用程序中使用计时器。我可以使用Java版本,但这意味着我必须实现ActionListener接口(interface)。为了保持一致性,我宁愿使用 Scala Publishers/Reactors 模型,这样我就可以拥有listenTo计时器的东西。

这是我尝试过的:

class ScalaTimer(time: Int) extends Component {
val t = new javax.swing.Timer(time, new java.awt.event.ActionListener {
def actionPerformed(e: java.awt.event.ActionEvent) {
publish(new scala.swing.event.ActionEvent(this))
}
})
def start() {t.start()}
def stop() {t.stop()}
// etc

}

不起作用,因为 this 引用的是 ActionListener 而不是 ScalaTimer 类。

另外,我可能不应该扩展Component...我尝试了这个,因为我获得了发布者/ react 器功能,但它并没有真正意义。我应该做这样的事情吗?如果是这样,我是否需要包含其他特征,以及我如何知道我必须实现哪些方法?

 class ScalaTimer extends javax.swing.Timer with Publisher {

(我的 IDE 立即标记“缺少方法 Timer(Int, ActionListener) 的参数”,这看起来有点奇怪,因为我没有调用方法。)

最佳答案

执行此操作的规范方法是在您要引用的内容的顶部引入别名(通常是 self ,除非已经使用):

class ScalaTimer(time: Int) extends Component {
self =>
val t = ...
publish(new scala.swing.event.ActionEvent(self))
...

关于java - 如何为 javax.swing.Timer 编写 Scala 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6825729/

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