首先,我是一名Web开发人员和新手Java程序员。 我的老板要我在应用程序中创建此按钮:
我的自定义按钮类必须扩展JButton
或BasicButtonUI
,以便可以重复使用。
我对Stack Overflow做了一些研究,但我不明白答案,尤其是我老板的时间限制。
答案 0 :(得分:13)
您应该为此创建自己的组件。
覆盖JPanel上的 paintComponent 方法,并在paintComponent方法中绘制(即填充)灰色的圆角矩形2D:
RoundRectangle2D roundedRectangle = new RoundRectangle2D.Float(x, y, w, h, 10, 10);
g.fill(roundedRectangle);
(最后两个值确定曲率。在你得到你想要的东西之前四处游戏)
现在移动 x,y 并缩小宽度和高度,以便在绘制下一个矩形时,它位于灰色矩形内。将图形颜色设置为蓝色,然后执行以下操作:
RoundRectangle2D roundedRectangle2 = new RoundRectangle2D.Float(x + 5, y + 5, w - 10, h - 10, 10, 10);
g.fill(roundedRectangle2);
您还需要添加文字。添加文本需要x和y位置。精确的x和y位置可能很难计算,因此您可能需要使用FontMetrics来获取有关字符串矩形形状的更多信息。 Fontmetrics有像stringWidth()和getHeight()这样的方法,它们可以帮助你确定x和y应该是什么。
g.drawString("Click Me", x, y);
最后,您需要在面板上安装鼠标移动侦听器。监听器需要找到鼠标何时在按钮上,然后重绘组件。
您的矩形可以转换为shape对象,并且可以计算鼠标是否处于形状中。例如:
shape.contains(x,y)
如果包含,请更改颜色,然后在面板上调用重绘()或 updateUI()。
注意:您的颜色对象应保留为类中的类级别字段,以便可以通过鼠标悬停进行更改。
希望这有帮助!
答案 1 :(得分:4)
如果您不想使用图形API自己绘制图像,或者您不能将图像来自图形设计师,那么您可以将它们用作ImageIcon个对象并使用{{3 }和setRolloverIcon()。
在这种情况下,我会这样做
class ButtonRollover {
private String normalImagePath;
private String rolloverImagePath;
public ButtonRollover(String normalImagePath, String rolloverImagePath) {
this.normalImagePath = normalImagePath;
this.rolloverImagePath = rolloverImagePath;
}
public void apply(AbstractButton abstractButton) {
abstractButton.setBorderPainted(false);
abstractButton.setBackground(new Color(0, 0, 0, 0));
abstractButton.setRolloverIcon(createImageIcon(rolloverImagePath));
abstractButton.setIcon(createImageIcon(normalImagePath));
}
private ImageIcon createImageIcon(String path) {
java.net.URL imgURL = getClass().getResource(path);
if (imgURL != null) {
return new ImageIcon(imgURL);
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
}
而不是使用它。 E.g。
public class Main extends JFrame {
public static void main(String[] args) {
Main main = new Main();
main.setBackground(Color.WHITE);
main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
main.setSize(640, 480);
Container contentPane = main.getContentPane();
ButtonRollover buttonRollover = new ButtonRollover("/bt_normal.png",
"/bt_hover.png");
JButton btn = new JButton();
buttonRollover.apply(btn);
contentPane.add(btn);
main.setVisible(true);
}
}
只需将图像文件放在类路径中即可。
答案 2 :(得分:2)
有办法做到这一点。
1)JButton内置了API setIcon。你可以在这里设置ImageIcon。
2)您可以添加鼠标监听器(输入鼠标,退出鼠标)将图标更改为所需的图标。
3)Make a button round - 请参阅创建曲线按钮。
答案 3 :(得分:0)
public class Main extends JFrame {
public static void main(String[] args) {
Main main = new Main();
main.setBackground(Color.WHITE);
main.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
main.setSize(640, 480);
Container contentPane = main.getContentPane();
ButtonRollover buttonRollover = new ButtonRollover("/bt_normal.png",
"/bt_hover.png");
JButton btn = new JButton();
buttonRollover.apply(btn);
contentPane.add(btn);
main.setVisible(true);
}
}