Wie füge ich den Reaktionen für einen MainFrame in scala.swing einen WindowStateListener
hinzu?Einen WindowStateListener in scala.swing hinzufügen
Keine der Klassen in scala.swing.event
scheint angemessen zu sein?
Wie füge ich den Reaktionen für einen MainFrame in scala.swing einen WindowStateListener
hinzu?Einen WindowStateListener in scala.swing hinzufügen
Keine der Klassen in scala.swing.event
scheint angemessen zu sein?
Dies ist nicht möglich mit scala.swing
aus dem Kasten (I grep nur die 2.9.1 Quelle für WindowStateListener
sicher zu sein), aber es ist sehr einfach, Ihre eigene Rolle:
import swing._
case class WindowStateChanged(
override val source: Window,
oldState: Int,
newState: Int
) extends event.WindowEvent(source)
trait StateListeningWindow extends Window { outer =>
this.peer.addWindowStateListener(new java.awt.event.WindowStateListener {
def windowStateChanged(e: java.awt.event.WindowEvent) {
publish(WindowStateChanged(outer, e.getOldState, e.getNewState))
}
})
}
Jetzt nur noch mischen in StateListeningWindow
:
object WindowStateDemo extends SimpleSwingApplication {
def top = new MainFrame with StateListeningWindow {
import java.awt.Frame._
reactions += {
case WindowStateChanged(_, _, ICONIFIED) => // Do something.
case WindowStateChanged(_, oldState, newState) => // Something else.
}
}
}
könnten Sie auch einpacken leicht die java.awt.Frame
Konstanten für etwas mehr idiomatische.
Danke. Ich bin möglicherweise in der Lage, diese Technik für andere Ereignis-Listener zu verwenden, die ich auch brauche (wie den Listener zum Ändern von Eigenschaften). – Ralph