【问题标题】:How to set Icon to JFrame如何将图标设置为 JFrame
【发布时间】:2013-03-17 11:00:10
【问题描述】:

我试过这种方式,但没有改变?

ImageIcon icon = new ImageIcon("C:\\Documents and Settings\\Desktop\\favicon(1).ico");
frame.setIconImage(icon.getImage());

【问题讨论】:

  • 您的文件路径似乎有问题。如果在指定的路径中找不到图像,将设置默认图像图标。

标签: java swing icons jframe


【解决方案1】:

最好使用 .png 文件; .ico 是特定于 Windows 的。最好不要使用文件,而是使用类资源(可以打包在应用程序的 jar 中)。

URL iconURL = getClass().getResource("/some/package/favicon.png");
// iconURL is null when not found
ImageIcon icon = new ImageIcon(iconURL);
frame.setIconImage(icon.getImage());

尽管您甚至可能会考虑使用 setIconImages 来处理多种尺寸的图标。

【讨论】:

  • 即使图像路径正确,我也一直收到空指针异常
  • 迟来的回应:图标应该与您调用 getClass() 的类在同一个 jar 中,并且路径使用 / 区分大小写。
  • 你知道如何从 weburl 获取 favicon 并在 setIconImage 上显示
  • 是的,我的问题是我使用的是ico 文件。切换到 PNG 并且成功了!
  • @JFreeman 一点:一个 .ico 可以包含多个不同分辨率的图像。 setIconImages 也可以用于多个(单文件)图像;对于较大的 alt-tab 图标等。我之前没有提到,以免进一步混淆问题。
【解决方案2】:

尝试将图像放在 src 文件夹之外的单独文件夹中。然后,使用 ImageIO 加载您的图像。它应该是这样的:

frame.setIconImage(ImageIO.read(new File("res/icon.png")));

【讨论】:

  • 上面的答案对我不起作用,但这有效!
【解决方案3】:

最后我发现了设置 jframe 图标的主要问题。这是我的代码。它与其他代码类似,但这里有几件事需要注意。

    this.setIconImage(new ImageIcon(getClass().getResource("Icon.png")).getImage());

1) 将此代码放入 jframe WindowOpened 事件中

2) 将 Image 放在创建所有表单和 java 文件的主文件夹中,例如

src\ myproject\ myFrame.form
src\ myproject\ myFrame.java
src\ myproject\ OtherFrame.form
src\ myproject\ OtherFrame.java
src\ myproject\ Icon.png

3) 最重要的是文件名区分大小写,即 icon.png 不起作用,但 Icon.png。

这样,即使在最终构建您的项目之后,您的图标也会在那里。

【讨论】:

    【解决方案4】:
    frame.setIconImage(new ImageIcon(URL).getImage());
    

    /* 框架是 JFrame setIcon 方法,在你的框架上设置一个新图标 new ImageIcon 创建一个新的类实例(这样您就可以从您提供的 url 中获取一个新图标) 最后 getImage 返回你需要的图标 这是制作图标的“快速”方式,对我来说很有帮助,因为它是一行代码 */

    【讨论】:

    • 请添加一些对您的代码的解释,特别是它的作用,以及它将如何解决问题。
    【解决方案5】:

    你可以试试下面的方法,

    myFrame.setIconImage(Toolkit.getDefaultToolkit().getImage("Icon.png"));
    

    【讨论】:

      【解决方案6】:

      这是我用来设置JFrame图标的代码

      import javax.imageio.ImageIO;
      import java.io.File;
      import java.io.IOException;
      
        try{ 
          setIconImage(ImageIO.read(new File("res/images/icons/appIcon_Black.png")));
        } 
        catch (IOException e){
          e.printStackTrace();
        }
      

      【讨论】:

        【解决方案7】:

        只需将这几行代码复制到您的代码中,并将“imgURL”替换为图像(您要设置为jframe图标)位置。

        JFrame.setDefaultLookAndFeelDecorated(true);
        
        //Create the frame.
        JFrame frame = new JFrame("A window");
        
        //Set the frame icon to an image loaded from a file.
        frame.setIconImage(new ImageIcon(imgURL).getImage());
        

        【讨论】:

          【解决方案8】:

          我正在使用以下实用程序类来设置 JFrameJDialog 实例的图标:

          import java.awt.*;
          import java.io.IOException;
          import java.io.InputStream;
          import java.net.URISyntaxException;
          import java.util.Scanner;
          
          public class WindowUtilities
          {
              public static void setIconImage(Window window)
              {
                  window.setIconImage(Toolkit.getDefaultToolkit().getImage(WindowUtilities.class.getResource("/Icon.jpg")));
              }
          
              public static String resourceToString(String filePath) throws IOException, URISyntaxException
              {
                  InputStream inputStream = WindowUtilities.class.getClassLoader().getResourceAsStream(filePath);
                  return toString(inputStream);
              }
          
              // http://stackoverflow.com/a/5445161/3764804
              private static String toString(InputStream inputStream)
              {
                  try (Scanner scanner = new Scanner(inputStream, "UTF-8").useDelimiter("\\A"))
                  {
                      return scanner.hasNext() ? scanner.next() : "";
                  }
              }
          }
          

          所以使用 this 变得像调用一样简单

          WindowUtilities.setIconImage(this);
          

          在你的类中某个地方扩展了JFrame

          例如,当使用Maven 时,Icon.jpg 必须位于myproject\src\main\resources

          【讨论】:

            【解决方案9】:
            public FaceDetection() {
                initComponents();
                //Adding Frame Icon
                try {
                    this.setIconImage(ImageIO.read(new File("WASP.png")));
                } catch (IOException ex) {
                    Logger.getLogger(FaceDetection.class.getName()).log(Level.SEVERE, null, ex);
                }
            }'
            

            这对我有用。

            【讨论】:

              【解决方案10】:

              这对我有用。

                  frame.setIconImage(Toolkit.getDefaultToolkit().getImage(".\\res\\icon.png"));
              

              对于导出的jar文件,需要配置构建路径包含res文件夹,使用如下代码。

                  URL url = Main.class.getResource("/icon.png");
                  frame.setIconImage(Toolkit.getDefaultToolkit().getImage(url));
              

              【讨论】:

                【解决方案11】:

                我用Maven,有项目的结构,是输入命令创建的:

                mvn archetype:generate
                

                所需的文件icon.png必须放在你的maven项目的src/main/resources文件夹中。

                然后您可以在项目中使用下一行:

                ImageIcon img = new ImageIcon(getClass().getClassLoader().getResource("./icon.png"));
                setIconImage(img.getImage());
                

                【讨论】:

                  【解决方案12】:

                  我的项目代码如下:

                  private void setIcon() {
                         setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/slip/images/cage_settings.png")));
                  
                      }
                  

                  【讨论】:

                    猜你喜欢
                    • 2015-08-08
                    • 1970-01-01
                    • 2020-05-06
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2012-12-16
                    • 1970-01-01
                    相关资源
                    最近更新 更多