2009-05-14 11 views
1

Ich habe einen einfachen Schieberegler mit nur 3 Optionen. Es ist seltsam, den Benutzer zu zwingen, das kleine Thumbnail auf dem Schieberegler zu ziehen, wenn es viel einfacher wäre, auf eines der 3 tatsächlichen Labels neben dem Schieberegler zu klicken. Weiß jemand, wie man das erreicht?Wie man Schieberegler anklickbar macht [Flex 3]

Antwort

1

Dies ist ein cooles Problem.

Das von Slider verwendete Label-Objekt ist eine Unterklasse von Label (SliderLabel). Der beste Weg wäre also, den Slider zu untergliedern und Event-Listener zu den Labels hinzuzufügen.

Ich denke, Sie konnten erfolgreich Ereignislistener in der commitProperties-Methode oder der updateDisplayList-Methode hinzufügen. Ich bin mir nicht sicher, ob man dem anderen vorzuziehen wäre, aber commitProperties scheint die mehr richtige Wahl zu sein.

Also, in der Unterklasse von Slider:

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

und dann vielleicht so etwas wie dies für sliderLabelClickListener:

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

Ich glaube, Sie ein benutzerdefiniertes Ereignis wollen würde, anstatt ein Dispatching regulär Event, so können Sie den Namen/ID/Wert des Labels enthalten.

Sie können auch eine "dispose" -Methode verwenden, um den CLICK-Ereignis-Listener aus den Labels zu entfernen, wenn der Slider von der Bühne entfernt wird. Es ist kein Problem, wenn Sie den Slider nicht entfernen werden, aber wenn Sie das tun, erstellen Sie normalerweise eine Methode mit dem Namen dispose und legen Sie alle meine manuelle Entfernungslogik dort (Entfernen von Ereignislistenern, Entfernen/Entfernen von ChangeWatchers). Dann weise ich dem Ereignis REMOVED_FROM_STAGE der Komponente einen Listener zu und rufe die Methode dispose von diesem Listener auf.

+0

Das klingt interessant. Ich werde versuchen, das funktioniert zu bekommen - danke! –

0

Sind Sie sicher, dass ein Schieberegler in diesem Fall die beste Komponente ist? Im Allgemeinen werden Schieberegler verwendet, wenn der Benutzer eine große Auswahl an zusammenhängenden Optionen zur Auswahl hat, bei denen die Genauigkeit der Auswahl eines Benutzers keine Rolle spielt (zB ein Lautstärkeregler - mit einer Lautstärke von 51% gegenüber 50% macht wirklich keinen großen Unterschied).

Wenn Sie nur drei Optionen haben und der Benutzer nur eine dieser drei Optionen auswählen kann, würde ich vorschlagen, entweder ein Kombinationsfeld oder eine Optionsfeldgruppe zu verwenden.

+0

Hallo, der Schieberegler steht für die Größe von klein -> mittel -> groß. Der Schieberegler ist in diesem Fall sinnvoll, weil Sie mit dem Schieberegler die zunehmende Größe anzeigen. Im Moment gibt es 3 feste Größen, aber in der Zukunft könnte die Einschränkung entfernt werden und es könnte eine beliebige Größe zwischen x und y sein. –

+0

Ahh OK, ich kann sehen, warum du diesen Ansatz dann nehmen willst. Das heißt, ich habe mir die Flex-Dokumente angeschaut, und ich glaube nicht, dass es einen einfachen Weg gibt, anklickbare Labels zu bekommen. Die Slider-Klasse enthält nur ein Array von Labels, die den Ticks entsprechen. Sie könnten etwas Glück haben, indem Sie Label abstechen und Klick-Listener hinzufügen, aber ich habe es selbst nicht versucht. – Dan