0

Scalaのスイングコンポーネントが完全にラップされていないように見える理由はありますか?たとえば、「paintImmediately」関数。または「更新」(これが原因でオーバーライドできないようです)。

ScalaAPIと比較したScalaソースコードの調査は少し混乱しているようです..(以下のscala 2.9ソースが発揮します)。APIは、これらの他の関数が存在することを示唆しているようです。

http://www.scala-lang.org/api/current/scala/swing/Component $ SuperMixin.html

SuperMixinの特性からわかることは、ピアコンポーネントへのオーバーライド呼び出しを開くものです。ほんの少しが定義されているようです。Update(Graphics g)をオーバーライドするにはどうすればよいですか?Panel.peer.paintImmediately(rect)を呼び出すより流暢な方法はありますか?

描画のためにこれらの問題を修正するために、新しいPanelクラスを構築するためにScalaソースを改造することを検討しています。

抽象クラスComponentextendsUIElement {override lazy val peer:javax.swing.JComponent = new javax.swing.JComponent with SuperMixin {} var initP:JComponent = null

  /**
* This trait is used to redirect certain calls from the peer to the wrapper
* and back. Useful to expose methods that can be customized by overriding.
*/
  protected trait SuperMixin extends JComponent {
    override def paintComponent(g: Graphics) {
      Component.this.paintComponent(g.asInstanceOf[Graphics2D])
    }
    def __super__paintComponent(g: Graphics) {
      super.paintComponent(g)
    }
    override def paintBorder(g: Graphics) {
      Component.this.paintBorder(g.asInstanceOf[Graphics2D])
    }
    def __super__paintBorder(g: Graphics) {
      super.paintBorder(g)
    }
    override def paintChildren(g: Graphics) {
      Component.this.paintChildren(g.asInstanceOf[Graphics2D])
    }
    def __super__paintChildren(g: Graphics) {
      super.paintChildren(g)
    }

    override def paint(g: Graphics) {
      Component.this.paint(g.asInstanceOf[Graphics2D])
    }
    def __super__paint(g: Graphics) {
      super.paint(g)
    }
  }
4

1 に答える 1

0

ほとんどの scala スイング ラッパーpeerは、Java ライブラリ内の対応するラップされたコンポーネントに委譲し、操作は暗黙的な変換によって利用可能になります。

数分の余裕があるときに詳細を追加します。

于 2012-11-18T08:31:19.317 に答える