当为JComponent使用本地文件时,有没有办法不对文件路径进行硬编码?

时间:2017-06-29 00:37:52

标签: java git

我想上传我的项目,一个纸牌游戏给Github,它有一张来自我硬盘的照片作为游戏卡牌桌。有没有办法编译/运行和上传它没有代码将整个文件路径硬编码到它?截至目前,它:

public static void main(String[] args){
    JFrame frame = new JFrame(); 
    JLabel panel = new JLabel(new ImageIcon("C:\\Users\\MyName\\Documents\\javaprojects\\Cardgame\\cardgameProject\\cardgameTableCanvas.jpg"));  
    frame.setSize(WIDTH,HEIGHT);
    panel.setSize(WIDTH,HEIGHT);
    frame.add(panel);  
    frame.setTitle("Test Canvas");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    CardgameTable sampleTable = new CardgameTable();
    frame.add(sampleTable);
    frame.setVisible(true);
}

如果其他人从Git中提取问题我也不想要问题,我认为文件路径可以做到。

1 个答案:

答案 0 :(得分:1)

这实际上取决于你的java代码所在的位置!有几个工具允许您创建本地文件路径的URL对象,这些工具可以输入ImageIcon创建!

如果图像与java代码位于同一目录(文件夹)中,则以下内容应该可以确保甚至在其他计算机上引用该文件:

URL cardgameCanvas = new File("cardgameTableCanvas.jpg").toURI().toURL();
JLabel panel = new JLabel(new ImageIcon(cardgameCanvas));  

For java 7+Paths.get("cardgameTableCanvas.jpg").toUri().toURL()

这应该允许您通过首先创建链接到它的URL对象和passing that URL object到新的ImageIcon对象来引用图像!

希望这有帮助!

Additional Source

修改

您也可以这样做

JLabel panel = new JLabel(new ImageIcon("cardgameTableCanvas.jpg"));

修改2

你的主人会看起来像这样(如果你想走'#34;艰难的方式"):

public static void main(String[] args){
    JFrame frame = new JFrame(); 
    URL cardgameCanvas = new File("cardgameTableCanvas.jpg").toURI().toURL();
    JLabel panel = new JLabel(new ImageIcon(cardgameCanvas));   
    frame.setSize(WIDTH,HEIGHT);
    panel.setSize(WIDTH,HEIGHT);
    frame.add(panel);  
    frame.setTitle("Test Canvas");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    CardgameTable sampleTable = new CardgameTable();
    frame.add(sampleTable);
    frame.setVisible(true);
}

但是因为它适合你,我会建议只引用本地文档本身:

public static void main(String[] args){
    JFrame frame = new JFrame(); 
    JLabel panel = new JLabel(new ImageIcon("cardgameTableCanvas.jpg")); 
    frame.setSize(WIDTH,HEIGHT);
    panel.setSize(WIDTH,HEIGHT);
    frame.add(panel);  
    frame.setTitle("Test Canvas");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    CardgameTable sampleTable = new CardgameTable();
    frame.add(sampleTable);
    frame.setVisible(true);
}