1

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

4

2 回答 2

1

这是一个很酷的问题。

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

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

因此,在您的 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/值。

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

于 2009-06-17T15:05:53.053 回答
0

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

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

于 2009-05-15T20:28:27.767 回答