Java 改变按钮形状,同时尊重外观和感觉

Java 改变按钮形状,同时尊重外观和感觉,java,swing,look-and-feel,paint,Java,Swing,Look And Feel,Paint,我知道这个问题已经被问了一百万次,可以通过重写paintComponent()来完成,但我想知道的是如何在尊重当前外观的同时更改形状。如果我想将形状更改为圆形,我还希望按钮看起来像按钮,只是形状不同 我试着制作一个JButton,即覆盖的paintComponent,然后将其剪切成一个圆圈,但在Nimbus LAF上没有得到边框效果 有更好的办法吗?或者在JButton?中是否有用于绘制组件的方法使用ComponentUI。此UI类有一个绘制方法,用于绘制组件。绘制方法使用L&F的设置,这些设置

我知道这个问题已经被问了一百万次,可以通过重写
paintComponent()
来完成,但我想知道的是如何在尊重当前外观的同时更改形状。如果我想将形状更改为圆形,我还希望按钮看起来像按钮,只是形状不同

我试着制作一个JButton,即覆盖的
paintComponent
,然后将其剪切成一个圆圈,但在
Nimbus LAF
上没有得到边框效果


有更好的办法吗?或者在
JButton

中是否有用于绘制组件的方法使用ComponentUI。此UI类有一个绘制方法,用于绘制组件。绘制方法使用L&F的设置,这些设置作为特性存储在UIManager中

要创建自己的组件
RoundButton
从扩展而来,例如
AbstractButton
,您可以创建自己的
RoundButtonUI
(可能从
ButtonUI
扩展)。在这里,您可以使用普通按钮(如
按钮.font
按钮.foreground)的属性创建自己的绘制方法,以使用与普通按钮相同的L&F值绘制自己的组件

RoundButton
类中,应该实现方法
getUIClassID()
,该方法将返回字符串
“RoundButtonUI”
。这将使用您的
RoundButtonUI


一个很好的例子是
JButton
本身

有一个圆形的
图标
,可以让您开始使用。每个LAF的组件都是唯一的。因此,每个LAF的形状/大小/颜色/字体都是唯一的。如果要更改组件的形状,则需要重写给定LAF的UI。除非您的LAF支持圆形边框,否则您将无法执行此操作。没有捷径可走。你需要编写所有的代码。@camickr在不知道当前的
LAF
?我想这可能是它,尽管它仍然不能使成型按钮看起来完美。我在制作新的L&f时经常使用它,你必须注意所有的边框和插图等都是正确的,使LayoutManager正确处理组件。也许你可以发布你的代码。谢谢,我做了一些调整。我认为它看起来不错,而且它仍然保持了边界效果,这要感谢
Nimbus
的编写方式!