Java 是否有创建自定义按钮的标准方法?

Java 是否有创建自定义按钮的标准方法?,java,user-interface,jbutton,Java,User Interface,Jbutton,我总是对不同的GUI和它们上的自定义组件感兴趣。目前,我对定制JButton很好奇 关于我所指的示例,请看这个GUI(这只是我快速拉出来的一个GUI): 所有按钮都是定制的。我想知道做这些按钮的正确方法是什么 就个人而言,当我想要创建自定义按钮时,我只需执行以下操作: ImageIcon icon = new ImageIcon(getClass().getClassLoader().getResource(resourcePath)); Image img = icon.getImage()

我总是对不同的GUI和它们上的自定义组件感兴趣。目前,我对定制JButton很好奇

关于我所指的示例,请看这个GUI(这只是我快速拉出来的一个GUI):

所有按钮都是定制的。我想知道做这些按钮的正确方法是什么

就个人而言,当我想要创建自定义按钮时,我只需执行以下操作:

ImageIcon icon = new ImageIcon(getClass().getClassLoader().getResource(resourcePath));
Image img = icon.getImage();
Image newimg = img.getScaledInstance(buttonW, buttonH, java.awt.Image.SCALE_SMOOTH);
button.setIcon(new ImageIcon(newimg));
button.setMargin(new Insets(0,0,0,0));
button.setBorderPainted(false);  
button.setFocusPainted(false);  
button.setContentAreaFilled(false);  
button.setText("");
这似乎是一个简单的方法,但我不确定这是否是正确的方法。它保留了JButton功能,但不一定能够自定义它。基本上,我会被困在我所拥有的任何图像的背景中。我也只能使按钮看起来有圆角

上面的代码是一种不正确的方法吗?我觉得可能是这样。如果是的话,你能提供我应该做的其他方法吗

我遇到了一些很好的例子,例如:

不管怎么说,我只是想看看人们是如何创建他们的自定义jbutton的,也许在工作环境中更容易接受的方法是什么


如果您有自定义按钮的任何图像,我很乐意查看它们,也许还有您用来创建它们的源代码。

您可能想要编写自定义按钮UI,您可以扩展javax.swing.plaf.ComponentUI

您可以只对一个按钮或几个按钮应用自定义UI,或者创建自定义外观,以便所有按钮都使用您的UI

创建自定义UI类而不是使用图像的高级方法是

  • 可伸缩
  • 你能翻译文本
  • 内存使用更少,您不必为每个按钮加载大图像
有关UI示例,请参见例如


如果您只需要一个或两个按钮,那么使用图像可能是最佳解决方案。

您可能需要编写自定义按钮UI,您可以扩展javax.swing.plaf.ComponentUI

您可以只对一个按钮或几个按钮应用自定义UI,或者创建自定义外观,以便所有按钮都使用您的UI

创建自定义UI类而不是使用图像的高级方法是

  • 可伸缩
  • 你能翻译文本
  • 内存使用更少,您不必为每个按钮加载大图像
有关UI示例,请参见例如


如果您只需要一个或两个按钮,那么使用图像可能是您的最佳解决方案。

如果您想要制作非常详细和美观的按钮(或任何组件),我建议您使用JavaFX,因为它在设计上非常灵活。您是在说LAF吗?@JoshM,这非常简洁。从本质上讲,它使用的是外部库?看起来可能值得一看。谢谢你的提醒,我想它也可以列出来。但是我已经研究了很多look&feel库。我个人只想创建我自己好看的按钮。(圆形边缘,通过简单的呼叫改变颜色,通过呼叫改变图标/图像,等等)-但我想用正确的方式来做,而不是像我现在所做的那样做一些黑客工作。所以本质上我是在浪费时间(重新发明轮子)创建自己的按钮?我目前在JDK6,也许我应该升级一下。你介意给我看看你通过JavaFX做的一些按钮吗编辑Nevermind,找到一个不错的小网站!好吧,如果你想制作非常高细节和好看的按钮(或任何组件),我建议你使用JavaFX,因为它在设计上非常灵活。你是说LAF吗?@JoshM,这很好。从本质上讲,它使用的是外部库?看起来可能值得一看。谢谢你的提醒,我想它也可以列出来。但是我已经研究了很多look&feel库。我个人只想创建我自己好看的按钮。(圆形边缘,通过简单的呼叫改变颜色,通过呼叫改变图标/图像,等等)-但我想用正确的方式来做,而不是像我现在所做的那样做一些黑客工作。所以本质上我是在浪费时间(重新发明轮子)创建自己的按钮?我目前在JDK6,也许我应该升级一下。你介意给我看看你通过JavaFX做的一些按钮吗编辑Nevermind,找到一个不错的小网站!有趣的是,在你们和Josh之间,你们给了我足够的动力去研究JavaFX。我要开始读了。目前,我只需要几个自定义按钮,但最终该列表可能会增加。我想肯定会有人来发布他们定制按钮的示例,也许我有点过于乐观了!有趣的是,在你们和Josh之间,你们给了我足够的动力去研究JavaFX。我要开始读了。目前,我只需要几个自定义按钮,但最终该列表可能会增加。我想肯定会有人来发布他们定制按钮的示例,也许我有点过于乐观了!