gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:38:30 24 4
gpt4 key购买 nike

我想上传我的项目,一个纸牌游戏到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 中提取的,我也不希望出现问题,并且我认为文件路径可以做到这一点。

最佳答案

这实际上取决于您的 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

你的 main 看起来像这样(如果你想走“艰难的路”):

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

关于java - 当为 JComponent 使用本地文件时,有没有办法不对文件路径进行硬编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44814594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com