如何将图像添加到JButton

时间:2011-01-26 04:22:53

标签: java swing icons jbutton embedded-resource

我正在尝试将图像添加到JButton中,但我不确定我缺少什么。当我运行以下代码时,该按钮看起来与我创建它时没有任何图像属性完全相同。 Water.bmp位于我的项目文件夹的根目录中。

ImageIcon water = new ImageIcon("water.bmp");
    JButton button = new JButton(water);
    frame.add(button);

10 个答案:

答案 0 :(得分:69)

我认为您的问题出在图像的位置。你应该把它放在你的来源中,然后像这样使用它:

  JButton button = new JButton();
  try {
    Image img = ImageIO.read(getClass().getResource("resources/water.bmp"));
    button.setIcon(new ImageIcon(img));
  } catch (Exception ex) {
    System.out.println(ex);
  }

在此示例中,假设图像位于src / resources /文件夹中。

答案 1 :(得分:15)

@Rogach

您可以添加:

// to remote the spacing between the image and button's borders
button.setMargin(new Insets(0, 0, 0, 0));
// to add a different background
button.setBackground( ... );
// to remove the border
button.setBorder(null);

答案 2 :(得分:6)

它看起来像是一个位置问题,因为该代码非常适合添加图标。

由于我不知道您的文件夹结构,我建议添加一个简单的检查:

File imageCheck = new File("water.bmp");

if(imageCheck.exists()) 
    System.out.println("Image file found!")
else 
    System.out.println("Image file not found!");

这样一来,如果你的路径名错了,它会告诉你,而不是什么都不显示。如果文件不存在,则应该抛出异常,等等。

答案 3 :(得分:2)

public class ImageButton extends JButton {

    protected ImageButton(){
    }

    @Override
        public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        Image img = Toolkit.getDefaultToolkit().getImage("water.bmp");

        g2.drawImage(img, 45, 35, this);
        g2.finalize();
    }
}

或使用此代码

class MyButton extends JButton {

    Image image;
    ImageObserver imageObserver;


    MyButtonl(String filename) {
            super();
            ImageIcon icon = new ImageIcon(filename);
            image = icon.getImage();
            imageObserver = icon.getImageObserver();
        }

     public void paint( Graphics g ) {
            super.paint( g );
            g.drawImage(image,  0 , 0 , getWidth() , getHeight() , imageObserver);
        }
    }

答案 4 :(得分:2)

我只做了一件事,它对我有用..检查你的代码就是这种方法..

setResizable(false);

如果它是假的,那么它会正常工作...... 我希望它有所帮助..

答案 5 :(得分:2)

您将图像放在资源文件夹中并使用以下代码:

    x = c("Jan. 20, 2009", "July 20, 1969", "June 28, 1914", "July 14, 1789", "Oct. 
    14, 1066")

    d = lubridate::mdy(x)
    d = d[order(d)]
    result = diff(d)
    labels = format(d, "%m/%d/%Y")
    names(result) = paste(head(labels, -1), labels[-1], sep = "-")
    result
    Time differences in days
    # 10/14/1066-07/14/1789 07/14/1789-06/28/1914 06/28/1914-07/20/1969 07/20/1969-01/20/2009 
    #                263979                 45638                 20111                 14429 

答案 6 :(得分:1)

buttonB.setIcon(new ImageIcon(this.getClass().getResource("imagename")));

答案 7 :(得分:1)

//paste required image on C disk
JButton button = new JButton(new ImageIcon("C:water.bmp");

答案 8 :(得分:1)

此代码适用于我:

    BufferedImage image = null;
    try {
        URL file = getClass().getResource("water.bmp");
        image = ImageIO.read(file);
    } catch (IOException ioex) {
        System.err.println("load error: " + ioex.getMessage());
    }
    ImageIcon icon = new ImageIcon(image);
    JButton quitButton = new JButton(icon);

答案 9 :(得分:0)

例如,如果您在文件夹res/image.png中有图像,则可以写:

try
{
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    InputStream input = classLoader.getResourceAsStream("image.png");
    // URL input = classLoader.getResource("image.png"); // <-- You can use URL class too.
    BufferedImage image = ImageIO.read(input);

    button.setIcon(new ImageIcon(image));
}
catch(IOException e)
{
    e.printStackTrace();
}

在一行中:

try
{
    button.setIcon(new ImageIcon(ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("image.png"))));
}
catch(IOException e)
{
    e.printStackTrace();
}

如果图像大于按钮,则不会显示。