Java:使用图像作为按钮

Posted

技术标签:

【中文标题】Java:使用图像作为按钮【英文标题】:Java: using an image as a button 【发布时间】:2011-06-21 09:06:26 【问题描述】:

我想在 Java 中使用图像作为按钮,我尝试这样做:

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

但这仍然显示图像背后的实际按钮,我只想将图像用作按钮,我该怎么做?

【问题讨论】:

【参考方案1】:

像这样删除边框:

button.setBorder(BorderFactory.createEmptyBorder());

还有内容1:

button.setContentAreaFilled(false);

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

【讨论】:

这有点成功,但是按钮本身仍然有某种背景,有没有办法完全删除它?还是让它透明? 您可以尝试将背景设置为另一种颜色或透明。您的图片是透明的还是实心正方形?【参考方案2】:

建议将图像设置为标签并在标签中添加鼠标侦听器以检测点击。

例子:

ImageIcon icon = ...;

JLabel button = new JLabel(icon);

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

【讨论】:

【参考方案3】:

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

【讨论】:

这仍然描绘了看起来像一个非常小的按钮边框版本,至少在 MacOS 上是这样。【参考方案4】:
button.setBorderPainted( false );

【讨论】:

这仍然绘制按钮边框/填充,至少在 MacOS 上。【参考方案5】:

这可以通过将 contentAreaFilled 属性设置为 False 在 netbeans 中轻松完成

【讨论】:

【参考方案6】:
    BufferedImage buttonIcon = ImageIO.read(new File("myImage.png"));
    button = new JButton(new ImageIcon(buttonIcon));
    button.setBorderPainted(false);
    button.setFocusPainted(false);
    button.setContentAreaFilled(false);

【讨论】:

【参考方案7】:

写这个

button.setContentAreaFilled(false);

【讨论】:

【参考方案8】:

据我所知,没有简单的方法可以做到这一点,如果您只想显示图像并表现得像按钮,则需要覆盖 JButton 类的“paintComponent”方法来修改您的图像,您可以添加一个 JPanel 来绘制图像 (clicky) 并添加一个 MouseListener/MouseAdapter 来处理“mousePressed”事件

【讨论】:

【参考方案9】:

我按照以下步骤操作,我可以成功创建一个“ImageButton”。

    创建一个JButton 添加了动作监听器 设置图像图标(注意我已将info.png 图标放在 src\main\resources 文件夹中并使用类加载器加载)。项目结构如下。 设置一个空的Border 禁用内容区域填充 禁用焦点 添加到 contentPane

PFB 对我有用的代码

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);

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

【讨论】:

以上是关于Java:使用图像作为按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何使用图像作为提交按钮?

如何在 Vue.js 中使用图像作为按钮?

在图像中使用两个单独的空格作为android中的按钮

导航左栏按钮项作为图像徽标

按钮图像作为表单输入提交按钮?

Html.ActionLink 作为按钮或图像,而不是链接