如何将图像添加到JButton

我想添加一个图像到一个JButton,我不知道我错过了什么。 当我运行下面的代码时,这个button看起来就像我没有任何图像属性创build它一样。 Water.bmp在我的项目文件夹的根目录中。

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

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

  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 /文件夹中。

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

它看起来像一个位置问题,因为该代码是完全正常的添加图标。

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

 File imageCheck = new File(water.bmp); if(imageCheck.exists()) System.out.println("Image file found!") else System.out.println("Image file not found!"); 

这样,如果你的path名称错误,它会告诉你,而不是什么都不显示。

我只做了一件事情,它为我工作..检查你的代码是这种方法..

 setResizable(false); 

如果它错误使它成真,它将工作得很好..我希望它帮助..

 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); } } 
 //paste required image on C disk JButton button = new JButton(new ImageIcon("C:water.bmp"); 

这个代码适用于我:

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

例如,如果你在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(); } 

如果图像大于button,则不显示。

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