如何将图像添加到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")));