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

标签 java swing slider widget jslider

我有兴趣创建一个类似于 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/

相关文章:

java - tomcat服务器停止时UI上的异常处理

java - fragment 内的 ManagedQuery()

java - SWING 中的代码/文本折叠

java - Swing 卡布局

javascript - 用于天气应用的圆形 slider

javafx - 如何设置 slider 更改监听器仅在 JavaFX 中释放鼠标拖动时触发?

JQuery UI slider 定位

java - 如何在java中给出FTP地址?

java - 命令提示符无法使用 Runtime.getRuntime().exec 打开

java - Bukkit:我怎么称呼一个事件?