如何使滑块标签可点击[Flex 3]

时间:2009-05-14 20:55:11

标签: user-interface button label slider flex3

我有一个简单的滑块,只有3个选项。强制用户拖动滑块上的小缩略图似乎很奇怪,因为单击滑块侧面的3个实际标签之一会更容易。有谁知道如何做到这一点?

2 个答案:

答案 0 :(得分:1)

这是一个很酷的问题。

Slider使用的Label对象原来是Label的子类(称为SliderLabel)。因此,最好的方法可能是将Slider子类化并将事件侦听器添加到标签中。

我认为您可以在commitProperties方法或updateDisplayList方法中成功添加事件侦听器。我不确定一个是否会优于另一个,但commitProperties似乎是 more 正确的选择。

所以,在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);
        }
    }
}

然后对于sliderLabelClickListener可能是这样的:

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

我认为你想要一个自定义事件,而不是发送常规Event,所以你可以包含标签的名称/ id /值。

此外,您可能需要放置一个'dispose'方法,以便在从舞台上移除Slider时从标签中删除CLICK事件侦听器。如果你不打算移除Slider,这不是问题,但如果你是,我通常做的是创建一个名为dispose的方法并将所有手动删除逻辑放在那里(删除事件监听器,取消监视/删除ChangeWatchers)。然后我为组件的REMOVED_FROM_STAGE事件分配一个监听器,并从该监听器调用dispose方法。

答案 1 :(得分:0)

在这种情况下,您确定滑块是最好的组件吗?一般来说,当用户有大量连续选项可供选择时,使用滑块,用户选择的精度并不重要(例如音量滑块 - 体积为51%而不是50%真的不会有太大的区别。)

如果您只有三个选项,并且只允许用户选择这三个选项中的一个,我建议您使用组合框或单选按钮组。