如何为摆动应用程序设置图标图像?
我见过很多不同的例子,展示了如何设置JFrame的IconImage
,以便应用程序使用该图标而不是标准咖啡杯。他们都没有为我工作。如何为摆动应用程序设置图标图像?
这里的“我”的代码(在逃从其他岗位和互联网大量举债):
public class MyApp extends JFrame
{
public MyApp()
{
ImageIcon myAppImage = loadIcon("myimage.jpg");
if(myAppImage != null)
setIconImage(myAppImage.getImage());
}
private ImageIcon loadIcon(String strPath)
{
URL imgURL = getResource(strPath);
if(imgURL != null)
return new ImageIcon(imgURL);
else
return null;
}
}
使得该getResource()
方法的调用时,该代码失败倒在loadIcon
。对我来说,这里只有两种可能:(1)myImage.jpg
位于错误的目录中,或者(2)getResource()
不喜欢我的图像(我不得不在Photoshop中将它从CMYK转换为RGB,所以我可以使用
我已经使用System.out.println(new File(".").getAbsolutePath());
技巧来找到应该存储图像JPG的目录,但仍然没有任何工作。我随后将JPG放在我项目中的每个目录中,只是将文件位置作为罪魁祸首。
因此,让我相信有一些getResource()
不喜欢JPG本身。但是我现在已经用尽了我对Swing强大广泛世界中的图像和图标的理解。
我的JPG在其他图像查看器中加载得很好,所以这也被排除了。有人有主意吗?
在此先感谢!
OK同一目录我想通了。出于某种原因,显然你需要为特定的细胞添加一个特殊的条件,使其与其他细胞不同。观察我的原始代码:
if(row == 2 && column == 2)
c.setBackground(new java.awt.Color(0, 0, 255));
else
c.setBackground(table.getBackground());
这没有奏效,因为我需要将它包装在一个条件中。
if (!table.isRowSelected(row))
{
if(row == 2 && column == 2)
c.setBackground(new java.awt.Color(0, 0, 255));
else
c.setBackground(table.getBackground());
}
这是wasa douzy!
什么?这是对这个问题的最佳答案吗? –
这可能是最荒谬的答案(对自己的问题)! JTable和单元格的着色与设置JFrame的图标有什么关系? – dm76
把图像中的类路径的根说getResource("classpath:myimage.jpg");
与您的代码的问题是,JVM是不确定在哪里查找图像文件,所以它的返回null。
这里是关于classpath
我知道classpath是JRE将查找.class文件的目录。如果这是正确的,那么我的NetBeans会自动创建一个相当复杂的构建/目录,其中有一个名为classes /的文件夹,它本身包含我的*com/package,META-INF /和res /。我已经将图像放在这些目录中的每一个目录中,并像您指定的那样在getResource调用中为“classpath:”字符串添加前缀。仍然没有去...我仍然认为它不喜欢JPG – IAmYourFaja
一个很好的链接应该是
if(imgURL != null)
^
,而不是
if(imgURL !- null)
和
URL imgURL = this.getClass().getResource(strPath);
,而不是
URL imgURL = getResource(strPath);
然后正常工作,如果"myimage.jpg"
与MyApp.class
谢谢 - 但第一个(imgURL! - null)显然是一个错误,因为它永远不会编译。按照您的建议进行第二次更改,并确保图像与MyApp.class位于同一文件夹中。仍然没有去... – IAmYourFaja
两个建议:
- 尝试使用
getClass().getResource("x.jpg")
,并直接把文件相同的文件夹中.class
文件你在类的 - 确保名称中的情况是相同的 - 有些操作系统区分大小写,在JAR中,一切都区分大小写。
我试过下面这是一个类似于你的同类question的答案。它适用于我。
试着把你的图像放在你的src 文件夹以外的单独文件夹中。然后,使用ImageIO加载您的图像。 (回答8月27日在'13 0:18 AndyTechGuy)
frame.setIconImage(ImageIO.read(new File("res/icon.png")));
要检查问题是否与URL试试:'的System.out.println( “字节的估计数目在文件中=” + imgURL.openStream()可用());'。 – toto2
感谢toto2 - 现在我们终于到了某个地方!该行用“null”消息抛出一个异常...容易出现我见过的最糟糕,最不有用的异常消息。任何线索? – IAmYourFaja
根据api,'available'并不是一个坚实的方法,所以我们不能总结得很多。你可以尝试在两个不同的行上分割'openStream()。avalaible()'来查看错误来自哪里。我的猜测是你的图像很好,但无法定位。由于您使用的是NetBeans,因此您可以参阅本教程(http://netbeans.org/kb/docs/java/gui-image-display.html)。 – toto2