Java Swing完全舍入JButton(无法点击外部圆圈不可见)

时间:2011-10-08 11:21:59

标签: java swing rotation jbutton

我一直在努力实现完全自由的JButton:

  • 自由形状作为边框,因为解决方案在前一个主题中给出:Rounded Swing JButton using Java
  • 但无法点击外部区域的形状
  • 即使是父类(JButton)
  • ,也不会绘制外部区域的形状

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

作为一个例子,想想一个红圈球:我可以给用户的最好的互动是它不能在外面区域点击,特别是如果球真的很大。

提前谢谢

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

  • 用于给予Shape的按压外观,以及JButton做的=>>正如有人在下面注意到我,如果我使用两个不同的图纸/图像,这不是最困难的

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

1 个答案:

答案 0 :(得分:4)

你有三个选择

1)每个自定义Look and Feels都有工具Rounded JComponents,这是最安全的方式,如何做到这一点,也许也是正确的,其中一部分带来了优秀的输出Java Swing GUI和长Bug历史记录,我建议使用Substance Look&感觉,但对EDT非常敏感

2)您可以覆盖整个(自定义Look and Feels已经这样做)ButtonUI,但您的UI_DelegateLook 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交叉Platform并跨越Look & Feel非敏感的

一切......由你决定,祝你好运