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

  • 作为上一个线程的解决方案,自由形状作为边界:Rounded Swing JButton using Java
  • 但是无法单击外部形状
  • 而且即使父类(JButton)
  • 也不会绘制外部形状

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

    例如,考虑一个红色圆圈的球:我可以给用户的最佳交互是它不能在外部区域单击,尤其是在球确实很大的情况下。

    先感谢您

    (我想到了一个用Java2D从头开始编写的组件,并使用Shape contains()方法来查看点击是否良好。但是我会遇到两个主要问题:
  • 用于为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非敏感的,那么您必须将所有可能的PlatformsLook and Feels改写

    3)用JComponent创建Rounded Borders,在内部用GradientPaint填充区域,然后添加MouseListenerMouseMotionListenerKeyListener或更好地编写自己的KeyBindings并创建自己的Model以避免linstening Listeners之间的一致性,然后将您的Custom JButton与跨ojit的代码交叉不敏感

    一切....取决于你,很幸运

    09-11 18:09