如何更改JFrame图标

我有一个JFrame ,在标题栏(左上angular)显示一个Java图标。 我想将该图标更改为我的自定义图标。 我应该怎么做?

像这样创build一个新的ImageIcon对象:

 ImageIcon img = new ImageIcon(pathToFileOnDisk); 

然后用setIconImage()将它设置为你的JFrame

 myFrame.setIconImage(img.getImage()); 

另外检查setIconImages() ,而不是一个List

这是一个替代scheme,为我工作:

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

这与接受的答案非常相似。

JFrame.setIconImage(Image image)非常标准。

下面是我如何做到这一点:

 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("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); } } 

这里是下载器:

 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); } } } } 

不幸的是,上面的解决scheme并不适用于Jython斐济插件。 我不得不使用getProperty来dynamic构build相对path。

以下是对我有用的东西:

 import java.lang.System.getProperty; import javax.swing.JFrame; import javax.swing.ImageIcon; frame = JFrame("Test") icon = ImageIcon(getProperty('fiji.dir') + '/path/relative2Fiji/icon.png') frame.setIconImage(icon.getImage()); frame.setVisible(True) 

只需添加下面的代码:

setIconImage(new ImageIcon(PathOfFile).getImage());

这在我的例子中超过了this诀窍,或者this在我的class级中反驳了JFrame

 URL url = getClass().getResource("gfx/hi_20px.png"); ImageIcon imgicon = new ImageIcon(url); super.setIconImage(imgicon.getImage()); 

在构造函数中添加如下代码:

 public Calculator() { initComponents(); //the code to be added this.setIconImage(newImageIcon(getClass().getResource("color.png")).getImage()); } 

将“color.png”更改为要插入的图片的文件名。 将此图片拖放到您的项目的包(在源包下)。

运行你的项目。