【问题标题】:Custom Icons on JTreeJTree 上的自定义图标
【发布时间】:2012-01-19 23:10:54
【问题描述】:

我有两个关于图标的问题。

我使用 ImageIcons 作为 JTree 上的默认图标。正如教程所建议的那样,我正在使用这种方法加载图标:

protected ImageIcon createImageIcon(String path) {

        java.net.URL imgURL = getClass().getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
}

虽然为了让它工作,我必须将图像与我认为是混乱的源代码一起存储在文件中(但我读到它需要在 .jar 上运行)。有没有办法在项目文件夹而不是 src 上类似地加载图像?

还有一种方法可以自动将图像缩放到正确的尺寸以在 JTree 上显示吗?谢谢!

【问题讨论】:

    标签: java swing icons


    【解决方案1】:

    代码不会从 src 文件夹加载 ImageIcon。它从运行时类路径加载它。对于要在运行时类路径中的图像,最简单的方法确实是将它们放在src 文件夹中,以便您的 IDE 自动将它们与 .class 文件一起复制到目标文件夹。

    如果需要,您可以在项目中定义另一个源目录(例如,名为resources),IDE 也会将该源目录的文件复制到目标文件夹中。这允许将 Java 文件与资源文件分开。

    【讨论】:

    • 您使用的是哪个 IDE?如果是 Eclipse:右键单击 - 新建源文件夹。
    • 我找到了如何定义另一个源目录,但是我如何从另一个 src 的类中引用它?
    • 和以前一样。 Eclipse 将两个源目录编译到同一个目标目录。运行时一切都在类路径中。 Java 并不关心您的源代码是如何组织的。它只是从类路径加载类和资源。阅读en.wikipedia.org/wiki/Classpath_%28Java%29
    • 是的,我已经尝试过了,这就是我要问的原因。图片/JTreeIcons/java.png - 资源/图片/JTreeIcons/java.png -/resources/Images/JTreeIcons/java.png 。我想我会尝试更多。
    • 试试"/resources/the.png"。最初的/ 表示可以从类路径的根目录中找到该图像,这将避免因从包中的类中调用代码而引起的任何复杂性。
    【解决方案2】:

    有没有办法在项目文件夹而不是 src 时类似地加载图像?

    是的,您可以为ImageIcon 使用String 构造函数,它可以让您指定文件路径:

    ImageIcon imageIcon = new ImageIcon("images/image.png")
    

    您可以使用相对于工作目录的路径,也可以使用绝对路径。

    还有一种方法可以自动将图像缩放到正确的大小以在 JTree 上显示?

    看看this question的答案,我想这会让你为所欲为。

    【讨论】:

    • 谢谢!只需找到默认的图标大小,即 16*16
    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 2013-04-06
    • 2014-10-23
    • 2023-04-10
    • 1970-01-01
    • 2012-12-15
    • 2011-01-25
    相关资源
    最近更新 更多