2009-05-14 8 views
1

私は単純なスライダを3つしか持っていません。スライダーの横にある3つの実際のラベルの1つをクリックするほうがずっと簡単になるように、ユーザーにスライダーの小さなサムネイルをドラッグさせるのは奇妙なことです。誰もこれを達成する方法を知っていますか?スライダラベルをクリック可能にする方法[フレックス3]

答えて

1

これはクールな問題です。

Sliderで使用されるLabelオブジェクトは、Label(SliderLabel)のサブクラスであることが判明しています。だから、Sliderをサブクラス化し、イベントリスナーをラベルに追加するのが最善の方法でしょう。

私は、イベントリスナーをcommitPropertiesメソッドまたはupdateDisplayListメソッドに正常に追加できたと思います。 1つが他のものよりも好ましいかどうかはわかりませんが、commitPropertiesはのように見えます。正しい選択。スライダーのサブクラスでそう

、:

override protected function commitProperties():void 
{ 
    super.commitProperties(); 

    for(var i:int = 0; i < labelObjects.numChildren; i++) 
    { 
     if(!SliderLabel(labelObjects.getChildAt(i)).hasEventListener(MouseEvent.CLICK)) 
     { 
      SliderLabel(labelObjects.getChildAt(i)).addEventListener(MouseEvent.CLICK,sliderLabelClickListener); 
     } 
    } 
} 

と多分sliderLabelClickListenerため、このような何か:

private function sliderLabelClickListener(e:MouseEvent):void 
{ 
    dispatchEvent(new SliderLabelClickEvent(e.target)); 
} 

私はあなたではなく派遣よりも、そこにカスタムイベントをしたいと思いますregular Eventですので、ラベルの名前/ ID /値を含めることができます。

また、 'dispose'メソッドを使用して、ステージからスライダを削除したときにCLICKイベントリスナをラベルから削除することができます。 Sliderを削除しない場合は問題ではありませんが、私が通常行っていることは、disposeというメソッドを作成し、そこにすべての手動削除ロジックを置くことです(イベントリスナーを削除し、ChangeWatchersをアンインストール/削除する)。次に、コンポーネントのREMOVED_FROM_STAGEイベントにリスナーを割り当て、そのリスナーからdisposeメソッドを呼び出します。

+0

それは興味深いね。私は試してみると、この作業を得る - ありがとう! –

0

スライダはこの場合に使用するのに最適なコンポーネントですか?一般に、スライダは、ユーザが選択する広範囲の連続オプションを有する場合に使用され、ユーザの選択の精度はそれほど重要ではない(例えば、ボリュームスライダ - 50%本当に違いはありません)。

オプションが3つしかなく、ユーザーがこれらの3つのオプションのいずれかを選択できる場合は、コンボボックスまたはラジオボタングループのいずれかを使用することをお勧めします。

+0

こんにちは、スライダーはサイズを表し、小→中→大となります。この場合、スライダーのサイズが大きくなっているので、スライダーは理にかなっています。現時点では3つの固定サイズがありますが、将来は制限が解除され、xとyの間の任意のサイズになる可能性があります。 –

+0

ああ、私はあなたがこのアプローチをしたいと思う理由を知ることができます。 私はFlexのドキュメントを見ましたが、クリック可能なラベルを簡単に取得する方法はないと思います。スライダクラスには、ティックに対応するラベルの配列が含まれています。 Labelをサブクラス化してクリックリスナーを追加することができますが、自分で試したことはありません。 – Dan

関連する問題