如何制作自己的Scala UI事件

时间:2012-09-23 08:16:53

标签: swing events scala scala-swing

我目前正在开发我的第一个更大的Scala Swing project,我已经将own component编写为tile map编辑器的一部分,用户可以在其中选择切片。

正如组合框在选择另一个元素时发出某种事件一样,我希望这个组件使用我自己的case类做同样的事情。我没有找到关于这个主题的任何文章或教程。

进一步注意,我如何编写一个发布子组件事件的组件。所以它只是通过他们。

1 个答案:

答案 0 :(得分:3)

也许看看扩展scala-swing的其他项目。例如,有ScalaSwingContrib;我认为查看ColorChooser组件和关联的ColorChooserEvent是一个很好的起点,因为这是一个相当简单的组件。

import javax.{swing => js}
import js.{event => jse}
import java.awt.Color
import scala.swing._
import event.Event

class ColorChooser(initialColor: Color) extends Component {
  ...
  override lazy val peer: js.JColorChooser = 
    new js.JColorChooser(initialColor) with SuperMixin

  peer.getSelectionModel().addChangeListener(new jse.ChangeListener {
    def stateChanged(e: jse.ChangeEvent) {
      publish( new ColorChangeEvent(peer.getColor))
    }
  })
}

case class ColorChangeEvent(c: Color) extends Event