Swing:更改jframe的图标

时间:2012-09-15 15:56:49

标签: java swing jframe bufferedimage imageicon

import javax.swing.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;

class Two {
    public static void main(String args[]) throws IOException
    {
        BufferedImage img = ImageIO.read(new File("index.jpg"));
        JFrame frmOne = new JFrame("FACEBOOK");
        frmOne.setIconImage(img);
        frmOne.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frmOne.setVisible(true);
    }
}

在此处的代码中,将显示JPG图像而不是JFrame图标。但是,我想了解行BufferedImage img = ImageIO.read(new File("index.jpg"));的功能。任何帮助将不胜感激,我是新手。

4 个答案:

答案 0 :(得分:4)

代码BufferedImage img = ImageIO.read(new File("index.jpg"));的工作原理如下:

  1. BufferedImage img = ...表示该行的其余部分应存储到变量中。

  2. ImageIO.read(...表示从给定文件中读取图片

  3. new File("index.jpg")说找到名为"index.jpg"

  4. 的文件

    总的来说,它从index.jpg文件中加载图像并将此图像存储到BufferedImage img中。然后,您可以调用frmOne.setIconImage(img)来获取您从文件中读取的图像,并将其设置为框架的图标。

答案 1 :(得分:3)

setIconImage方法更改JFrame左上角显示的图像图标以及在应用程序之间切换时。另一个选择是:

frame.setIconImage(new ImageIcon("filename").getImage());

答案 2 :(得分:1)

BufferedImage img = ImageIO.read(new File("index.jpg"));

分析:

  • BufferedImage img

这会创建一个名为BufferedImage的{​​{1}}变量,我们可以将其视为一个Object,它包含java显示图像所需的数据,img as per docs

  

BufferedImage子类描述了一个可访问的BufferedImage   图像数据的缓冲区。 ImageBufferedImageColorModel组成   图像数据的栅格。

  • ImageIO

这个类基本上包含帮助我们读写图像的方法,而不必每次都写自己的As per docs

  

包含用于定位的静态便捷方法的类   ImageReadersImageWriters,并执行简单的编码和   解码。

  • read(File input)

这是public内的static ImageIO方法,因此无需new关键字即可访问。它允许我们读取我们想要用作Image的文件的数据,并将其读入的数据(因此我们将其保存在变量中)返回为per docs

  

返回一个BufferedImage作为解码提供的File的结果   从当前的那些中自动选择的ImageReader   注册。文件包装在ImageInputStream中。

     

参数:input - 要读取的文件。

     

返回:包含输入的已解码内容的BufferedImage,或null。

     

抛出:IllegalArgumentException - 如果输入为null。 IOException - 如果有错误   在阅读期间发生。

  • new File(String filename)

是类File中的非静态方法,因此必须使用新创建的实例(new)进行访问。它允许我们创建对文件的引用,以便我们可以在File实例上执行操作(即阅读写作等)as per docs

  

通过转换给定的路径名​​字符串来创建新的File实例   成为一个抽象的路径名。如果给定的字符串是空字符串,   那么结果就是空的抽象路径名。

     

参数:pathname - 路径名字符串

     

抛出:NullPointerException - 如果pathname参数为null

现在,当您致电setIconImage(img)时,我们从文件中读取的所有数据(即我们的图片并转换为BufferedImage)将用于将图片显示为JFrame s Icon。

另一种方法是:

// Create frame
String title = "Frame Title";
JFrame frame = new JFrame(title);

// Set icon
Image icon = Toolkit.getDefaultToolkit().getImage("icon.gif");
frame.setIconImage(icon);

答案 3 :(得分:0)

需要提及的是,您必须处理异常。恕我直言,代码可能写得更好:

BufferedImage img = null;  

try {
  img = ImageIO.read(new File("youricon.png"));   // get icon for JFrame
} catch (IOException e) {
  e.printStackTrace();
} 

frame.setIconImage(img);                          // set JFrame icon

此外,当您阅读文档时请注意.ico文件不由ImageIO()处理。使用.jpg,.png,.bmp或.gif文件。有关详细信息,请参阅http://docs.oracle.com/javase/7/docs/api/javax/imageio/package-summary.html

HTH