如何在JButton上放置图像?

时间:2012-10-02 14:04:46

标签: java image swing jbutton embedded-resource

我正在编写一个程序,要求我有一个按钮,上面有一个图像,但到目前为止,我还没有能够让它工作。我查看了本网站上的其他几篇帖子,包括How do I add an image to a JButton 我的代码:

public class Tester extends JFrame
{
    public Tester()
    {
        JPanel panel = new JPanel();
        getContentPane().add(panel);
        panel.setLayout(null);

        setTitle("Image Test");
        setSize(300,300);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        JButton button = new JButton();
        try 
        {
            Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));
            button.setIcon(new ImageIcon(img));
        } 
        catch (IOException ex) {}

        button.setBounds(100,100,100,100);
        panel.add(button);
    }

    public static void main(String[] args)
    {
        Tester test = new Tester();
        test.setVisible(true);
    }
}

当此代码运行时,会出现错误:线程“main”中的异常java.lang.IllegalArgumentException:input == null!此错误发生在以下行:

Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));

我不认为这个错误是由于java代码找不到该文件,因为我的Images文件夹位于src文件夹中(我正在使用Eclipse),如上面链接所推荐的那样。
有没有人对问题可能有什么想法?
感谢。

5 个答案:

答案 0 :(得分:9)

使用Eclipse时,您不会将图像保留在 src文件夹中,而是为此目的创建Source Folder。请参阅此链接,了解如何add images to resource folder in Eclipse

答案 1 :(得分:2)

使用此按钮创建按钮。

JButton button = new JButton(new ImageIcon(getClass().getClassLoader()
                                          .getResource("Images/BBishopB.gif")));

您正在做的是将Image设置为图标。这不起作用,因为setIcon()方法需要实现Icon接口的对象。希望这会有所帮助。

答案 2 :(得分:2)

尝试在getResource()中的包名前加上正斜杠,如下所示:

Image img = ImageIO.read(getClass().getResource("/Images/BBishopB.gif"));

答案 3 :(得分:1)

您可以直接找到图片:

JButton jb = new JButton(new ImageIcon("pic.png")); //pic is in project root folder
//Tip: After placing the image in project folder, refresh the project in Eclipse.

如果图像在JAR中,我通常会创建一个函数来为我进行检索,以便我可以重复使用它。

public static ImageIcon retrieveIcon(String path){
    java.net.URL imgUrl = 'classpackage'.'classname'.class.getResource(path);
    ImageIcon icon = new ImageIcon(imgUrl);
    return icon;
}

然后我会做,

JButton jb = new JButton(retrieveIcon("/pic.png"));

答案 4 :(得分:1)

Image img = ImageIO.read(getClass().getResource("Images\\BBishopB.gif"));

此行尝试同时执行过多操作,这使得在获取错误时很难找到错误。我建议拆分它:

URL imgURL = getClass().getResource("Images\\BBishopB.gif");
Image img = ImageIO.read(imgURL);

现在您可以使用Eclipse调试器来检查imgURL的返回值,这是NPE最有可能的候选者。尽管这并没有告诉您为什么会收到错误消息,但它会大大缩小问题范围。