Java Swing完全圆角的JButton(圆圈外的区域无法点击也看不到)

标签 java swing rotation jbutton

我一直在尝试实现一个完全免费的带边框的 JButton:

  • 作为边界的自由形状,作为解决方案在之前的线程中给出:Rounded Swing JButton using Java
  • 但是不能点击区域外的形状
  • 即使父类 (JButton) 也不会绘制区域外的形状

在“普通”Swing(没有任何 3d 派对库)中是否有一种简单的方法来做到这一点?否则,是否有一个很好的免费(当然开源更好)3d 方库来做到这一点?

举个例子,想想一个红圈球:我能给用户的最好的交互是它不能点击外部区域,尤其是当球真的很大的时候。

提前致谢

(我想到了一个用 Java2D 从头开始​​编写的组件,并使用 Shape contains() 方法来查看点击是否正确。但我会遇到 2 个主要问题:

  • 为 Shape 提供按下的外观,JButton 也这样做 => 正如下面有人注意到我的那样,如果我使用两个不同的绘图/图像,这并不是最困难的

    <
  • 用于处理事件 (ActionListeners) 以及 JButton 做它 => 如果我从 JComponent 继承,最困难的是拒绝(返回)处理如果我们没有点击好的区域=> 检测鼠标点击点和区域之间的最终交叉点的最佳方法是什么?)

最佳答案

你有三个选择

1) 每个自定义 Look and Feels已经实现了 Rounded JComponents,这是最安全的方法,如何舒适且可能正确地执行此操作,其中一部分为 Java Swing GUI 和长 带来了出色的输出Bug 历史,我建议使用 Substance Look & Feel,但它对 EDT 非常非常敏感

2) 你可以覆盖整个(自定义 Look and Feels 已经做到了)ButtonUI ,但是您的 UI_Delegate 将对 Look and FeelNative_OS 敏感,这意味着我发布的链接示例适用于 Windows 具有Metal Look and Feel 的平台,如果你想创建一个跨Platform 并且跨Look & Feel 非敏感,那么你必须覆盖所有可能的平台外观

3) 创建带有Rounded BordersJComponent,填充里面的区域例如GradientPaint,然后添加MouseListenerMouseMotionListenerKeyListener 或更好地编写自己的 KeyBindings 并创建自己的 Model 以避免 linstening 之间的并发 Listeners,然后将是你的Custom JButton cross Platform and cross Look & Feel non-sensitive

一切....取决于你,祝你好运

关于Java Swing完全圆角的JButton(圆圈外的区域无法点击也看不到),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7696462/

相关文章:

java - 如何使用 Jackson 的本地化小数点分隔符反序列化浮点值

java - 如何自动选择 JTable 中的所有行并卡住选择?

java - 设备旋转后布局重新启动

animation - 四元数的二次插值 (SQUAD)

rotation - Verilog 桶形移位器

java - 如何在java中制作平滑的模糊效果?

java - Android Studio - 找不到tools.jar。请检查 X 是否包含有效的 JDK 安装

java - 有没有比在单个 JFrame 中保留多个 JTabbedPanes 更好的方法?

java - Java 小程序的 "Graphics g"中的 "paint()"的值是多少?

java - 创建通用的 groupBy 方法