Java:使用图像作为按钮

57

我想在Java中使用一张图片作为按钮,我尝试了以下代码:

BufferedImage buttonIcon = ImageIO.read(new File("buttonIconPath"));
button = new JButton(new ImageIcon(buttonIcon));

但是这仍然显示了图像后面的实际按钮,我只希望图像作为按钮起作用,我该怎么做?

9个回答

32

按照以下方式移除边框:

button.setBorder(BorderFactory.createEmptyBorder());

然后还有内容1:

button.setContentAreaFilled(false);

1: 取自@3sdmx在问题中添加的解决方案


这个有点起到了作用,但是按钮本身仍然有一些背景,有没有办法完全删除它?或者将其设置为透明的? - 3sdmx
你可以尝试将背景设置为另一种颜色或透明。你的图片是否具有透明度或者是一个实心正方形? - jzd

9

一个建议是将图像设置为标签,并向标签添加鼠标监听器以检测点击。

示例:

ImageIcon icon = ...;

JLabel button = new JLabel(icon);

button.addMouseListener(new MouseAdapter() {
  @Override
  public void mouseClicked(MouseEvent e) {
     ... handle the click ...
  }
});

1
button.setBorderPainted( false );

这在 MacOS 上仍会绘制按钮边框/填充。 - SingleShot

1

只需写入此内容

button.setContentAreaFilled(false);

1
    BufferedImage buttonIcon = ImageIO.read(new File("myImage.png"));
    button = new JButton(new ImageIcon(buttonIcon));
    button.setBorderPainted(false);
    button.setFocusPainted(false);
    button.setContentAreaFilled(false);

1

buttonIcon.setBorder(new EmptyBorder(0,0,0,0));

按钮图标.setBorder(new EmptyBorder(0,0,0,0));


在 MacOS 上,这仍然呈现出一个非常小的按钮边框版本。 - SingleShot

1

通过将contentAreaFilled属性设置为False,可以在NetBeans中轻松完成此操作。


0

我按照以下步骤成功地创建了一个“ImageButton”:

  1. 创建一个 JButton
  2. 添加一个动作监听器
  3. 设置一个图像图标(注意,我已经将 info.png 图标放置在 src\main\resources 文件夹中,并使用类加载器进行加载)。项目结构如下。Project folder structure
  4. 设置一个空的 Border
  5. 禁用内容区域填充
  6. 禁用焦点性
  7. 添加到 contentPane 中

以下是对我有效的代码:

JButton btnNewButton = new JButton("");
btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        System.out.println("Info clicked");
    }
});

String iconfilePath = this.getClass().getClassLoader().getResource("info.png").getFile();
btnNewButton.setIcon(new ImageIcon(iconfilePath));
btnNewButton.setBounds(10, 438, 39, 31);
btnNewButton.setBorder(BorderFactory.createEmptyBorder());
btnNewButton.setContentAreaFilled(false);
btnNewButton.setFocusable(false);
contentPane.add(btnNewButton);

以上代码产生的输出按钮如下所示。

enter image description here


0
据我所知,没有简单的方法可以实现它,您需要重写JButton类的“paintComponent”方法来绘制您的图像。如果您只想显示一个图像并像按钮一样工作,您可以添加一个绘制图像的JPanel(clicky),并添加一个MouseListener/MouseAdapter来处理“mousePressed”事件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接