如何从Mac Os X向Java(NetBeans)添加图标?

时间:2013-08-06 04:02:24

标签: java macos swing jlabel imageicon

所以我试图在我的程序中添加一个图标,但我正在阅读的教科书解释了如何仅为Windows用户。我想知道如何添加图标。我在我的程序源文件夹上有它,到目前为止我的代码是这样的:

logo = new ImageIcon("~://resources//CherryBoom.png");

labelone = new JLabel("Fruit No.1 : ", logo, SwingConstants.LEFT);
JPanel panelone = new JPanel();
panelone.add(labelone, logo);

图标仍然不会显示在Windows面板上,所以我真的迷失在这里,我不知道怎样才能让它显示在我的程序中。

2 个答案:

答案 0 :(得分:2)

首先,检查明显的解决方案,例如:

  • 你做过window.add(panelone);
  • 文件在正确的位置/网址中是否正确

其次,如果您讨厌像我这样的LayoutManagers,但仍想使用javax.swing,您可以尝试在面板的drawString课程中使用drawImagepaintComponent(Graphics g)方法。详细说明:

您需要制作自己的JPanel:

public class MyPanel extends JPanel {

以及覆盖方法:

@Override
public void paintComponent(Graphics g) {
在方法中,调用它,以便窗口可以自行刷新并执行其他内务处理:

super.paintComponent(g);

然后,使用drawString和drawImage在您希望的位置绘制这些图像:

g.drawString("Fruit No. 1", x, y);
logo.paintIcon(this, g, x, y);

每当您更改或绘制图像时,您还需要调用main方法:

panelone.repaint();

希望这有帮助!

答案 1 :(得分:2)

Java不支持扩展“〜”路径指令。

试试这个......

try {
  File file = new File("~");
  System.out.println(file.getAbsolutePath());
  System.out.println(file.getCanonicalPath());
} catch (IOException exp) {
  exp.printStackTrace();
}

我认为你会发现它没有指向用户主文件夹。

相反,您应该使用System.getProperty("user.home")

logo = new ImageIcon(System.getProperty("user.home") + File.separator + "/resources/CherryBoom.png");

现在,尽管如此,我强烈建议您使用ImageIO而不是ImageIcon,因为当出现问题时您会得到更好的反馈。

查看Reading/Loading an Image