2012-02-13 21 views
4

ScrollBarを追加しようとしています。 ScrollBarは、表示された文書を反復処理します。ただし、スクロールバーが変更されたときにイベントを受け取るのに問題があります。私は何を聞く必要があるのか​​分かりませんし、どんな出来事に対応すべきかもわかりません。私は次のことを試してみましたが、いくつかの出来事がありましたが、これは理想的な出来事ではないと思います。スカラーのScrollBarイベントの処理

listenTo(scrollBar) 
    listenTo(scrollBar.keys) 
    listenTo(scrollBar.mouse.moves) 
    listenTo(scrollBar.mouse.wheel) 
    listenTo(scrollBar.mouse.clicks) 

私はスクロールバーの内側をクリックしたときにたとえば、私が唯一MouseClickedMousePressed、およびMouseReleasedを取得する - 私は実際に値を変更するには、矢印をクリックしていないとき。

イベントが正しく受信されないスクロールバーについては、this discussionが見つかりましたが、2歳です。私が知る限り、著者はファイルにチケットをフォローアップしませんでした。たぶん彼は回避策を見つけました。

アイデア?

+0

あなたはコード全体をアップロードできますか?トップレベルコンテナであるウィンドウにスクロールバーを追加することはできません。 – unknown

+0

スクロールバーをコンテナに追加します。 – schmmd

答えて

1

良い質問です。矢印をクリックするとScrollBarが処理されず、ScrollBarUIによって処理されます。私は、デフォルトの実装(または少なくともScrollBarUIの実装の大部分の基本クラス)がBasicScrollBarUIだと考えています。

javax.swing.plaf.basic.BasicScrollBarUIのソースを調べる場合は、incrButtondecrButtonというボタンがあり、聞きたいコンポーネントです。

P.S.私はSliderのカスタム(キー)リスナーを必要とし、必要なコンポーネント/モデルを公開するカスタムUIを持っていました(ほとんどすべてのコンポーネントが保護されているので、簡単にサブクラスでアクセスでき、パブリックゲッターを介して公開できます)私のために。私は普通のJavaでそれをしましたが、おそらくscalaではプロパティ名を指定するだけでボタンを聴くことができます。

0

もう1つScala Swingが壊れています。 Adjustableの特性は完全に中空であり、何も配線されていないようです。

次作品:

class ScrollBarAlive extends swing.ScrollBar { 
    me => 
    peer.addAdjustmentListener(new java.awt.event.AdjustmentListener { 
    def adjustmentValueChanged(e: java.awt.event.AdjustmentEvent) { 
     publish(new swing.event.ValueChanged(me)) 
    } 
    }) 
} 

テスト:

import swing._ 

object ScrollBarTest extends SimpleSwingApplication { 
    lazy val top = new Frame { 
    val label = new Label { text = "0" } 
    val scroll = new ScrollBarAlive { 
     orientation = Orientation.Horizontal 
     listenTo(this) 
     reactions += { 
     case event.ValueChanged(_) => 
      label.text = value.toString + (if (valueIsAjusting) " A" else "") 
     } 
    } 
    contents = new BorderPanel { 
     add(label, BorderPanel.Position.North) 
     add(scroll, BorderPanel.Position.South) 
    } 
    pack().centerOnScreen() 
    open() 
    } 
} 

適切な実装もAdjustingEventのサブタイプをご紹介します。