2

我有兴趣创建一个类似于 JSlider 小部件的新小部件,但使用“幽灵”(半透明)旋钮显示先前的滑块位置,以及为真实旋钮的移动添加类似轨迹的动画。

我对扩展 Java Swing 小部件以添加新功能的正确方法有点困惑。

正如我所看到的,我有几个选择:

1) 扩展 JSlider,将我所有的新模型信息放在这里,并覆盖paint 以首先绘制 JSlider,然后覆盖我想要的添加。这个解决方案的问题是我需要反复试验才能将标记放在正确的位置(因为我无法访问完整的几何信息),这可能使其无法在所有情况下工作。

2)扩展Slider小部件的各种类(JSlider、SliderUI、BasicSliderUI、MetalSliderUI、BoundedRangeModel、DefaultBoundedRangeModel)。我在这里看到的优势是维护正确的模型-视图-控制器架构。但是,这将需要重载类中的各种函数。我相信结果看起来会很糟糕。

3) 复制所有 Slider 小部件的代码,并修改以创建我的新小部件。这将类似于选项 (2),但修改代码然后扩展功能可能会更简单一些(这将基本上是复制/修改代码)。

4)使用我想要的功能从头开始重新创建滑块小部件。查看现有 Swing Slider 小部件的代码后,这不是一项简单的任务。

我是否错过了一些更优雅的方法来创建一个从现有小部件借用功能的新小部件?

感谢您的见解。

4

1 回答 1

2

我会选择 2) 进行一些更改创建WrapperSliderUI将所有方法调用委托给委托 UI 的类。并覆盖只是绘制方法。

JSlider 的 SetUI 应该将原始 UI 包装在 WrapperSliderUI 中

public void setUI(SliderUI ui) {
    super.setUI(new WrapperSliderUI(ui));
}

在绘画中,您将检查原始 UI 类并相应地调整您的绘画。

于 2011-11-02T07:19:48.090 回答