开发者

Java Swing completely rounded JButton (circle outside area can't be clicked nor visible)

开发者 https://www.devze.com 2023-04-11 09:54 出处:网络
I\'ve been trying to implement a completely free bordered JButton : Free shape as a border, as a solution is given in a previous thread : Rounded Swing JButton using Java

I've been trying to implement a completely free bordered JButton :

  • Free shape as a border, as a solution is given in a previous thread : Rounded Swing JButton using Java
  • But the shape outside area can't be clicked
  • And the shape outside area is not drawn, even by the parent class (JButton)

Is there a simple way to do it in "plain" Swing (without any 3d party library) ? Otherwise, is there a good free (open-source is better of course) 3d party library in order to do this ?

As an example, think about a Red Circle ball : the best interaction I can give to users is that it can't click in the outside area, particularly if the Ball is really big.

Thank you in advance

(I've thought of a compo开发者_如何学运维nent written from scratch with Java2D, and using the Shape contains() method in order to see if the click is good. But I would have 2 main problems :

  • for giving the pressed apperance to the Shape, as well as the JButton does it => as someone noticed me below, that's not the most difficult, if I use two differents drawings/images

  • for handling events (ActionListeners) as well as the JButton does it => if i inherits from a JComponent, the most difficult will be to reject (return from) the handling if we have not clicked on the good area => what is the best way to detect this eventual intersection between mouse clicking point and the area ?)


you have three choises

1) every Custom Look and Feels have implements Rounded JComponents, this is safiest way how to do that confortly and maybe correctly too, part of them brings excelent output to the Java Swing GUI and with long Bug history, I'd suggest to use Substance Look & Feel, but is very, so sensitive to EDT

2) you can override whole (Custom Look and Feels already did that) ButtonUI, but your UI_Delegate will be Look and Feel and Native_OS sensitive, meaning example that link I post, works on Windows platform with Metal Look and Feel, if you want to create an cross Platform and cross Look & Feel non-sensitive, then you must to overrive all possible Platforms and Look and Feels

3) create JComponent with Rounded Borders, fill area inside with for example GradientPaint, and then add MouseListener, MouseMotionListener, KeyListener or better write own KeyBindings and create own Model for avoiding the concurency betweens linstening Listeners, then will be your Custom JButton cross Platform and cross Look & Feel non-sensitive

everything .... up to you, much luck

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号