2012-04-13 5 views

Antwort

2

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.

+1

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

Verwandte Themen