2011-11-02 93 views
2

我有兴趣创建一个类似于JSlider Widget的新Widget,但带有显示上一个滑块位置的“ghost”(半透明)旋钮为真实旋钮的移动添加一个类似轨迹的动画。扩展Java Swing Widgets(希望为JSlider添加动画和额外的标记)

我对扩展Java Swing小部件以添加新功能的适当方式有些困惑。

当我看到它,我有几个选择:

1)JSlider的扩展,这里将我所有的新模型,并覆盖漆先画出JSlider的,比来覆盖我的期望增加。这个解决方案的问题是我需要使用试验和错误来将标记置于正确的位置(因为我不能访问完整的几何信息),这可能会使其无法在所有情况下工作。 2)扩展Slider小部件的各种类(JSlider,SliderUI,BasicSliderUI,MetalSliderUI,BoundedRangeModel,DefaultBoundedRangeModel)。我在这里看到的优点是保持适当的模型 - 视图 - 控制器体系结构。但是,这将需要在类中重载各种函数。我相信结果会显得非常黑。

3)复制Slider部件的所有代码,修改以创建我的新部件。这与选项(2)类似,但修改代码然后扩展函数(基本上会复制/修改代码)可能会稍微简单一些。

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

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

谢谢你的洞察力。

回答

2

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

您JSlider的SetUI换行原UI在WrapperSliderUI

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

中的油漆,你将检查原来UI类,并相应地调整你的画。

+0

+1有一个相关的例子[这里](http://stackoverflow.com/questions/6996263)。 – trashgod

+0

谢谢,这有帮助。 – kashiko