【问题标题】:Where do you put the image you're loading for a button in a java app?你把你为一个按钮加载的图像放在哪里?
【发布时间】:2011-05-23 00:03:59
【问题描述】:

如果我不使用 guiformbuilder 创建应用程序,我有一个包 com.supercorp.killerapp,其中包含一个包 (com.supercorp.killerapp.views):

  • 如何在视图目录中的 JInternalFrame 上设置按钮的图标?
  • 一般来说,如何访问不同文件夹中的图像?
  • 我的所有图像都应该包含在一个单独的文件夹中吗?

我使用的语法是:

JButton iconButton = new JButton(new ImageIcon("page_delete.png"));

按钮不显示图像。

【问题讨论】:

    标签: java image swing button icons


    【解决方案1】:

    我将包含我的应用程序的 jar 放入一个名为 com.example.GreatApp.resources 的包中,然后使用以下方法加载它:

    getClassLoader().getResourceAsStream(
                   "com/example/GreatApp/resource/icon.png");`
    

    更新。完整示例

    /**
     * Creates and returns an ImageIcon from the resource in jar.
     * @param location resource location in the jar,
     * like 'com/example/GreatApp/res/icon.png' or null if it was not found.
     */
    public ImageIcon createImageIconFromResource(String location)
               throws java.io.IOException {
      java.io.InputStream input = getClassLoader().getResourceAsStream(
                   location);
      // or throw an ioexception here aka `file not found`
      if(input == null) return null;
      return new ImageIcon(ImageIO.read(input));
    }
    

    【讨论】:

    • 可能希望将其连接回图像。比如:new ImageIcon(ImageIO.read(stream));
    • 这就是我想要的,但我不确定如何处理该声明?像 new ImageIcon(ImageIO.read(getClassLoader().getResourceAsStream("com/example/GreatApp/resource/icon.png"); 这样的东西是否意味着即使需要它的文件是 com/example/ 我也可以加载它GreatApp/views/prettyform.java?它仍然是与 com/example/GreatApp/users/views/awesomeUserForm.java 相同的语法吗?
    • getClassLoader 属于什么类/包?我正在运行此方法,但没有出现任何异常,但仍然没有图标。
    • @dah ClassName.class.getClassLoader.
    【解决方案2】:

    您可以将图像放在类路径中的任何位置。我发现将它们放在项目的根目录中的“图像”文件夹中是最合乎逻辑的。

    包在编译和打包时映射到文件夹,因此看起来像您需要的那样:

    Image im = Toolkit.getDefaultToolkit().getImage( "/com/supercorp/killerapp/views/page_delete.png" );
    JButton iconButton = new JButton( new ImageIcon( im ) );
    

    【讨论】:

    • 这行得通还是你需要做new ImageIcon( getClass().getResource("/com/..."))?我认为ImageIcon(String) 构造函数不会从类路径中加载。
    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2011-03-18
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    相关资源
    最近更新 更多