How to change JFrame icon

261,727

Solution 1

Create a new ImageIcon object like this:

ImageIcon img = new ImageIcon(pathToFileOnDisk);

Then set it to your JFrame with setIconImage():

myFrame.setIconImage(img.getImage());

Also checkout setIconImages() which takes a List instead.

Solution 2

Here is an Alternative that worked for me:

yourFrame.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource(Filepath)));

It's very similar to the accepted Answer.

Solution 3

JFrame.setIconImage(Image image) pretty standard.

Solution 4

Here is how I do it:

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import java.io.File;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;



public class MainFrame implements ActionListener{

/**
 * 
 */


/**
 * @param args
 */
public static void main(String[] args) {
    String appdata = System.getenv("APPDATA");
    String iconPath = appdata + "\\JAPP_icon.png";
    File icon = new File(iconPath);

    if(!icon.exists()){
        FileDownloaderNEW fd = new FileDownloaderNEW();
        fd.download("http://icons.iconarchive.com/icons/artua/mac/512/Setting-icon.png", iconPath, false, false);
    }
        JFrame frm = new JFrame("Test");
        ImageIcon imgicon = new ImageIcon(iconPath);
        JButton bttn = new JButton("Kill");
        MainFrame frame = new MainFrame();
        bttn.addActionListener(frame);
        frm.add(bttn);
        frm.setIconImage(imgicon.getImage());
        frm.setSize(100, 100);
        frm.setVisible(true);


}

@Override
public void actionPerformed(ActionEvent e) {
    System.exit(0);

}

}

and here is the downloader:

import java.awt.GridLayout;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

import java.net.HttpURLConnection;
import java.net.URL;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;

public class FileDownloaderNEW extends JFrame {
  private static final long serialVersionUID = 1L;

  public static void download(String a1, String a2, boolean showUI, boolean exit)
    throws Exception
  {

    String site = a1;
    String filename = a2;
    JFrame frm = new JFrame("Download Progress");
    JProgressBar current = new JProgressBar(0, 100);
    JProgressBar DownloadProg = new JProgressBar(0, 100);
    JLabel downloadSize = new JLabel();
    current.setSize(50, 50);
    current.setValue(43);
    current.setStringPainted(true);
    frm.add(downloadSize);
    frm.add(current);
    frm.add(DownloadProg);
    frm.setVisible(showUI);
    frm.setLayout(new GridLayout(1, 3, 5, 5));
    frm.pack();
    frm.setDefaultCloseOperation(3);
    try
    {
      URL url = new URL(site);
      HttpURLConnection connection = 
        (HttpURLConnection)url.openConnection();
      int filesize = connection.getContentLength();
      float totalDataRead = 0.0F;
      BufferedInputStream in = new      BufferedInputStream(connection.getInputStream());
      FileOutputStream fos = new FileOutputStream(filename);
      BufferedOutputStream bout = new BufferedOutputStream(fos, 1024);
      byte[] data = new byte[1024];
      int i = 0;
      while ((i = in.read(data, 0, 1024)) >= 0)
      {
        totalDataRead += i;
        float prog = 100.0F - totalDataRead * 100.0F / filesize;
        DownloadProg.setValue((int)prog);
        bout.write(data, 0, i);
        float Percent = totalDataRead * 100.0F / filesize;
        current.setValue((int)Percent);
        double kbSize = filesize / 1000;

        String unit = "kb";
        double Size;
        if (kbSize > 999.0D) {
          Size = kbSize / 1000.0D;
          unit = "mb";
        } else {
          Size = kbSize;
        }
        downloadSize.setText("Filesize: " + Double.toString(Size) + unit);
      }
      bout.close();
      in.close();
      System.out.println("Took " + System.nanoTime() / 1000000000L / 10000L + "      seconds");
    }
    catch (Exception e)
    {
      JOptionPane.showConfirmDialog(
        null, e.getMessage(), "Error", 
        -1);
    } finally {
        if(exit = true){
            System.exit(128);   
        }

    }
  }
}

Solution 5

Just add the following code:

setIconImage(new ImageIcon(PathOfFile).getImage());
Share:
261,727

Related videos on Youtube

Anand
Author by

Anand

Web and iOS Developer. <3 Ruby, Javascript and ObjectiveC.

Updated on July 08, 2022

Comments

  • Anand
    Anand almost 2 years

    I have a JFrame that displays a Java icon on the title bar (left corner). I want to change that icon to my custom icon. How should I do it?

    • Carlos
      Carlos over 14 years
      I bet that in the most cases those people have not even heard of the API yet. Probably the best solution in cases like this is to provide a link to the API with the answer.
  • Anand
    Anand over 14 years
    what should be the size of the icon?.. im gonna create one now ..
  • BFree
    BFree over 14 years
    See here for interesting discussion about size: coderanch.com/t/343726/Swing-AWT-SWT-JFace/java/…
  • Itchy Nekotorych
    Itchy Nekotorych about 11 years
    These solutions do not work.
  • spongebob
    spongebob over 8 years
    There may be different size values needed: Sizes of frame icons used in Swing
  • shareef
    shareef about 8 years
    imgicon.getImage() is what i needed thanks
  • creativecreatorormaybenot
    creativecreatorormaybenot almost 8 years
    You don't need the super or this in your case. You can leave it out.
  • shareef
    shareef almost 8 years
    may be you are right it depends on your inheritance design
  • creativecreatorormaybenot
    creativecreatorormaybenot almost 8 years
    If you extend your class it is not really necessary.
  • shareef
    shareef almost 8 years
    as i remember i think i had inner classes with same method which make thing ambigous but yor assumption is the default i agree
  • creativecreatorormaybenot
    creativecreatorormaybenot almost 8 years
    Yes you are right. That is why I said it's not necessary, because it has to be done sometimes if you wan't two have a method with the same name ^^
  • php_coder_3809625
    php_coder_3809625 almost 8 years
    The only one which answers how to use the image if it's a resource. :D
  • gumuruh
    gumuruh over 7 years
    what is jthon? @otterb
  • otterb
    otterb over 7 years
    Jython is Python implemented with java
  • Neph
    Neph over 4 years
    Example for the filepath: The image is in "myProject/res" -> getClass().getResource("/myimage.png") (don't forget the leading "/"!)
  • Jignesh Gothadiya
    Jignesh Gothadiya over 4 years
    You can set titlebar icon using setIconImage() of JFrame and image must be .png file
  • Jignesh Gothadiya
    Jignesh Gothadiya over 4 years
    You can set titlebar icon using setIconImage() of JFrame and image must be .png file