2012-09-15 64 views
2
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"));的功能。任何帮助将不胜感激,我是新的摆动。Swing:更改jframe的图标

+0

1)请向JavaDocs咨询这些事情的最初解释。2)'framOne'有一种难闻的气味。永远不应该有'framTwo'。请参阅[使用多个JFrames,好/坏实践?](http://stackoverflow.com/a/9554657/418556)3)该代码在部署时可能会失败。该图像将成为一个嵌入式资源,并应通过URL访问。 4)尊重美国东部时间的规则! –

回答

3

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

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

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

  1. BufferedImage img = ...说该行的其余部分应存放于该变量。

  2. ImageIO.read(...说,读给定的文件图像

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

所以,总体来说,它加载图像了index.jpg文件,并将该图像的文件进入BufferedImage img。然后,您稍后只需拨打frmOne.setIconImage(img),将您从图像中读出的图像取出,并将其设置为图框的图标。

+0

谢谢先生,我懂了........... –

1

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

分析:

  • BufferedImage img

这将创建一个BufferedImage变量称为img,我们可以认为这是持有需要Java来显示的数据的对象图片,a BufferedImageas per docs

BufferedImage小类描述了具有可访问的 图像数据缓冲区的Image。 A BufferedImage由一个ColorModel和 一个图像数据的光栅组成。

  • ImageIO

该类基本上包含的方法来帮助我们读取和写入图像,而无需我们自己的每一次写,As per docs

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

  • read(File input)

这里面ImageIO一个publicstatic方法因此可在不new关键字来访问。它可以让我们在我们想为Image使用该文件的数据读取和返回它读取的数据(因此,我们把它保存在一个变量)为per docs

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

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

返回:一个包含输入解码内容的BufferedImage,或者为null。

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

  • new File(String filename)

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

由给定路径名字符串 转换为抽象创建一个新的文件实例路径名。如果给定的字符串是空字符串, 那么结果是空的抽象路径名。

参数:路径 - 一个路径名字符串

抛出:NullPointerException - 如果路径参数为null现在

,当你调用setIconImage(img)所有我们从文件中读取数据(这是我们的图片和被转换为BufferedImage)将用于显示图片作为JFrame的图标。

另一种方式来做到这一点是:

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

// Set icon 
Image icon = Toolkit.getDefaultToolkit().getImage("icon.gif"); 
frame.setIconImage(icon); 
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