Lui*_*hys 2 java swing scala timer wrapper
我想在Scala Swing应用程序中使用计时器.我可以使用Java版本,只是这意味着我必须实现ActionListener接口.我宁愿使用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
}
Run Code Online (Sandbox Code Playgroud)
不起作用this是因为引用了ActionListener而不是ScalaTimer类.
此外,我可能不应该扩展Component...我试过这个,因为我得到了Publisher/Reactor功能,但它没有真正意义.我应该这样做吗?如果是这样,我是否还需要包含其他特征,如何知道我必须实施哪些方法?
class ScalaTimer extends javax.swing.Timer with Publisher {
Run Code Online (Sandbox Code Playgroud)
(我的IDE立即标记"缺少方法Timer(Int,ActionListener)的参数",这似乎有点奇怪,因为我没有调用方法.)
执行此操作的规范方法是在要引用的事物的顶部引入别名(通常self除非已经采用):
class ScalaTimer(time: Int) extends Component {
self =>
val t = ...
publish(new scala.swing.event.ActionEvent(self))
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1472 次 |
| 最近记录: |