如何用Java创建Round JButton

4 java swing rounded-corners jbutton custom-component

首先,我是一名Web开发人员和新手Java程序员.我的老板要我在应用程序中创建此按钮:

在此输入图像描述

我的自定义按钮类必须扩展JButtonBasicButtonUI可以重复使用.

我对Stack Overflow做了一些研究,但我不明白答案,尤其是我老板的时间限制.

Oli*_*ins 13

您应该为此创建自己的组件.

覆盖JPanel上的paintComponent方法,并在paintComponent方法内绘制(即填充)灰色的圆角矩形2D:

RoundRectangle2D roundedRectangle = new RoundRectangle2D.Float(x, y, w, h, 10, 10);
g.fill(roundedRectangle);
Run Code Online (Sandbox Code Playgroud)

(最后两个值确定曲率.一直玩到你得到你想要的东西)

现在移动x,y并减小宽度高度,以便在绘制下一个矩形时,它位于灰色矩形内.将图形颜色设置为蓝色,然后执行以下操作:

RoundRectangle2D roundedRectangle2 = new RoundRectangle2D.Float(x + 5, y + 5, w - 10, h - 10, 10, 10);
g.fill(roundedRectangle2);
Run Code Online (Sandbox Code Playgroud)

您还需要添加文本.添加文本需要x和y位置.精确的x和y位置可能很难计算,因此您可能需要使用FontMetrics来获取有关字符串矩形形状的更多信息.Fontmetrics有像stringWidth()和getHeight()这样的方法,它们可以帮助你确定x和y应该是什么.

g.drawString("Click Me", x, y);
Run Code Online (Sandbox Code Playgroud)

最后,您需要在面板上安装鼠标移动监听器.监听器需要找到鼠标何时在按钮上,然后重绘组件.

您的矩形可以转换为形状对象,并且可以计算鼠标是否在形状中.例如:

shape.contains(x,y)
Run Code Online (Sandbox Code Playgroud)

如果它包含,请更改颜色,然后在面板上调用repaint()updateUI().

注意:您的颜色对象应保留为类中的类级别字段,以便可以通过鼠标悬停进行更改.

希望这可以帮助!

  • 你坚持的部分是什么?您是否尝试在面板上覆盖drawComponent(..)? (2认同)