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

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

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

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

【问题讨论】:

    标签: java swing awt jbutton


    【解决方案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”。

              1. 创建一个JButton
              2. 添加了动作监听器
              3. 设置图像图标(注意我已将info.png 图标放在 src\main\resources 文件夹中并使用类加载器加载)。项目结构如下。
              4. 设置一个空的Border
              5. 禁用内容区域填充
              6. 禁用焦点
              7. 添加到 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);
              

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-07-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多