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());
Related videos on Youtube
Author by
Anand
Web and iOS Developer. <3 Ruby, Javascript and ObjectiveC.
Updated on July 08, 2022Comments
-
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 over 14 yearsI 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 over 14 yearswhat should be the size of the icon?.. im gonna create one now ..
-
BFree over 14 yearsSee here for interesting discussion about size: coderanch.com/t/343726/Swing-AWT-SWT-JFace/java/…
-
Itchy Nekotorych about 11 yearsThese solutions do not work.
-
spongebob over 8 yearsThere may be different size values needed: Sizes of frame icons used in Swing
-
shareef about 8 years
imgicon.getImage()
is what i needed thanks -
creativecreatorormaybenot almost 8 yearsYou don't need the super or this in your case. You can leave it out.
-
shareef almost 8 yearsmay be you are right it depends on your inheritance design
-
creativecreatorormaybenot almost 8 yearsIf you extend your class it is not really necessary.
-
shareef almost 8 yearsas i remember i think i had inner classes with same method which make thing ambigous but yor assumption is the default i agree
-
creativecreatorormaybenot almost 8 yearsYes 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 almost 8 yearsThe only one which answers how to use the image if it's a resource. :D
-
gumuruh over 7 yearswhat is jthon? @otterb
-
otterb over 7 yearsJython is Python implemented with java
-
Neph over 4 yearsExample for the filepath: The image is in "myProject/res" ->
getClass().getResource("/myimage.png")
(don't forget the leading "/"!) -
Jignesh Gothadiya over 4 yearsYou can set titlebar icon using setIconImage() of JFrame and image must be .png file
-
Jignesh Gothadiya over 4 yearsYou can set titlebar icon using setIconImage() of JFrame and image must be .png file