Я хотел бы использовать таймер в приложении 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
}
Не работает, потому что this относится к классу ActionListener, а не к классу ScalaTimer.
Также мне, вероятно, не следует расширять Component... Я пробовал это, потому что получаю функциональность Publisher/Reactor, но это не имеет особого смысла. Должен ли я сделать что-то подобное вместо этого? Если да, то нужно ли мне включить другие трейты и как узнать, какие методы мне нужно реализовать?
class ScalaTimer extends javax.swing.Timer with Publisher {
(Моя IDE немедленно помечает «Отсутствующие аргументы для метода Timer(Int, ActionListener)», что кажется немного странным, поскольку я не вызывал метод.)