1

编辑:这是一个 Netbeans 项目。 所以我创建了一个名为 Card 的 JButton 子类。我正在尝试为创建按钮设置一个图标。

package matchinggame;

public class Card extends JButton {

    final static ImageIcon defaultIcon = new ImageIcon("cardback.jpg");

    ...

    public Card(int secretIconIndex) { 
        //Set the button's icon to the default icon
        setIcon(defaultIcon);
        ... 
    }

    ...

}

如果您想知道,“cardback.jpg”图像的位置是:

C:\Users\Jesse\SkyDrive\Documents\RCS\Grade 12\ICS4U\M9\MatchingGame\src\matchinggame\cardback.jpg

它与所有类都在同一个文件夹/包中,所以我相信我可以这样保留相对文件路径。当我运行程序时,所有按钮都是空白的(没有文本或图标)。这是构造函数问题还是文件路径问题?

4

3 回答 3

4

如果这是一个 Eclipse 项目,则将图像存储在resources/文件夹中的src/文件夹中。

setButtonIcon("cardback.jpg");

public void setButtonIcon(String filename) {
  ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  InputStream input = classLoader.getResourceAsStream("/"+filename);
  ImageIcon icon = new ImageIcon(ImageIO.read(input));
  super.setIcon(icon);
}
于 2013-02-18T23:56:20.903 回答
1

我的问题在问题评论中得到了回答。brano88 和 Hovercraft Full of Eels 说使用资源而不是文件路径。以下解决了我的问题:

final ImageIcon defaultIcon = new ImageIcon(getClass().getResource("/resources/cardback.jpg"));

我把它放在我的卡片课上。

注意:我将图像移动到 Eclipse 中的“src”文件夹或 Netbeans 中的“Source Packages”文件夹中的新“资源”包。

于 2013-02-19T00:13:11.447 回答
0

如果使用“eclipse”,则图像必须在文件夹“src”内才能使用绝对路径。利用:
new File("cardback.jpg").exists() // to see if the file is in the right place

于 2013-02-18T23:55:47.537 回答