gpt4 book ai didi

java - Extending Java Swing Widgets(希望给 JSlider 添加动画和额外的标记)

转载 作者:行者123 更新时间:2023-11-30 09:44:18 25 4
gpt4 key购买 nike

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

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

在我看来,我有几个选择:

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

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

3) 复制 Slider 小部件的所有代码,并进行修改以创建我的新小部件。这与选项 (2) 类似,但修改代码然后扩展函数可能更简单一些(无论如何基本上都是复制/修改代码)。

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

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

感谢您的见解。

最佳答案

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

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

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

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

关于java - Extending Java Swing Widgets(希望给 JSlider 添加动画和额外的标记),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7975458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com