我有兴趣创建一个类似于JSlider小部件的新小部件,但是带有“ghost”(半透明)旋钮显示前一个滑块位置,以及为真实旋钮的移动添加类似轨迹的动画。
我对扩展Java Swing小部件以添加新功能的正确方法感到困惑。
在我看来,我有几个选择:
1)扩展JSlider,将我的所有新模型信息放在这里,并覆盖绘画以首先绘制JSlider,然后覆盖我想要的添加内容。这个解决方案的问题是我需要使用反复试验来将标记放在正确的位置(因为我无法访问完整的几何信息),这可能会使它无法在所有情况下工作。
2)扩展Slider小部件的各种类(JSlider,SliderUI,BasicSliderUI,MetalSliderUI,BoundedRangeModel,DefaultBoundedRangeModel)。我在这里看到的优点是保持适当的模型 - 视图 - 控制器架构。但是,这将需要在类中重载各种函数。我相信结果似乎非常黑了。
3)复制所有Slider小部件的代码,并修改以创建我的新小部件。这与options(2)类似,但修改代码然后扩展函数可能会更简单一些(无论如何基本上都是复制/修改代码)。
4)使用我想要的功能从头开始重新创建滑块小部件。在查看现有的Swing Slider小部件代码之后,这不是一项简单的任务。
我是否缺少一些更优雅的方法来创建一个新的小部件,借用现有小部件的功能?
感谢您的见解。
答案 0 :(得分:2)
我会选择2)进行一些更改
创建WrapperSliderUI
类,该类将所有方法调用委托给委托UI。并覆盖只是绘制方法。
JSlider的SetUI应该将原始UI包装在WrapperSliderUI
中public void setUI(SliderUI ui) {
super.setUI(new WrapperSliderUI(ui));
}
在绘画中,您将检查原始UI类并相应地调整您的绘画。