2

WindowStateListenerscala.swing で MainFrame のリアクションにを追加するにはどうすればよいですか?

適切なクラスがないようにscala.swing.event思われますか?

4

1 に答える 1

2

これはそのままでは不可能ですがscala.swing(確かに 2.9.1 のソースを grep しましたWindowStateListener)、自分で作成するのは非常に簡単です。

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))
    }
  })
}

混ぜるだけです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.
    }
  }
}

java.awt.Frameより慣用的なもののために定数を簡単にラップすることもできます。

于 2012-04-14T15:55:47.327 に答える