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
的编写方式!