2009-05-14 2 views

답변

1

이것은 멋진 문제입니다.

Slider에서 사용하는 Label 객체는 SliderLabel이라는 Label의 하위 클래스로 밝혀졌습니다. 따라서 Slider를 서브 클래스 화하고 이벤트 리스너를 레이블에 추가하는 것이 가장 좋은 방법 일 것입니다.

commitProperties 메서드 또는 updateDisplayList 메서드에 이벤트 리스너를 성공적으로 추가 할 수 있다고 생각합니다. 하나는 다른 사람에게 바람직할지 모르겠지만, 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/값을 포함 할 수 있습니다.

또한 스테이지에서 슬라이더가 제거되면 레이블에서 CLICK 이벤트 리스너를 제거하는 'dispose'메소드를 넣을 수 있습니다. 슬라이더를 제거하지 않을 경우 문제가되지 않지만 평소에 수행하는 작업은 dispose이라는 메서드를 만들고 거기에 모든 수동 제거 논리를 적용하는 것입니다 (이벤트 리스너 제거, ChangeWatchers 제거/제거). 그런 다음 구성 요소의 REMOVED_FROM_STAGE 이벤트에 리스너를 할당하고 해당 청취자로부터 dispose 메서드를 호출합니다.

+0

재미있을 것 같습니다. 나는 노력할 것이다 - 고마워! –

0

슬라이더가이 경우에 가장 유용한 구성 요소입니까? 일반적으로 슬라이더는 사용자가 선택할 수있는 넓은 범위의 연속 옵션이있는 경우에 사용됩니다 (예 : 볼륨 슬라이더 - 볼륨이 50 %가 아닌 51 % 인 경우) 정말 차이를 많이 내지 않을 것입니다.)

세 가지 옵션 만 있고 그 세 가지 옵션 중 하나를 선택할 수있는 사용자는 콤보 상자 또는 라디오 단추 그룹을 사용하는 것이 좋습니다.

+0

안녕하세요, 슬라이더는 크기가 작음 -> 보통 -> 크게 표시됩니다. 이 경우 슬라이더를 사용하여 증가하는 크기를 표시하므로 슬라이더가 적합합니다. 현재 고정 된 크기가 3 개 있지만 향후에는 제한이 제거 될 수 있으며 x와 y 사이의 크기가 될 수 있습니다. –

+0

Ahh 좋아, 왜 내가이 접근법을 취하고 싶어하는지 알 겠어. 필자는 Flex 문서를 살펴 봤지만 클릭 가능한 레이블을 쉽게 얻을 수있는 방법은 없다고 생각합니다. 슬라이더 클래스에는 틱에 해당하는 레이블 배열이 포함됩니다. Label을 서브 클래 싱하고 클릭 리스너를 추가하는 행운을 누릴 수도 있지만 직접 시도하지는 않았습니다. – Dan

관련 문제