import java.awt.*;
import java.net.*;
import javax.imageio.*;
import java.io.*;
import javax.swing.*;
public class ImageTest2
{
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
MyFrame frame=new MyFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class MyFrame extends JFrame
{
public MyFrame()
{
setSize(1200,600);
setTitle("ImageTest2");
setLocationByPlatform(true);
ImageComponent component=new ImageComponent();
add(component);
}
}
class ImageComponent extends JComponent
{
// public ImageComponent()
// {
// try
// {
// image=ImageIO.read(new File("D:\\demo\\戴眼镜的猫2.jpg"));
// }
// catch (IOException e)
// {
// e.printStackTrace();
// }
// }
public void paintComponent(Graphics g)
{
Toolkit kit=Toolkit.getDefaultToolkit(); //*1
image=kit.getImage("d:\\demo\\戴眼镜的猫2.jpg"); //*2
if(image==null)return ;
int imageWidth=image.getWidth(this);
int imageHeight=image.getHeight(this);
g.drawImage(image,0,0,null);
for(int i=0;i*imageWidth<=getWidth();i++)
for(int j=0;j*imageHeight<=getHeight();j++)
if(i+j>0)g.copyArea(0,0,imageWidth,imageHeight,i*imageWidth,j*imageHeight);//*3
}
private Image image;
}
代码如上,问题如下,
1,如果我将注释的地方全部打开,然后将代码中*1及*2的地方注释掉,程序就会正常运行,在窗口中充满重复的图像,但如果按照代中的运行,就会一片空白,并且终止不了程序,只能通过关闭cmd的方法退出,很明显是下边的拷贝循环除了问题,如果注释掉for循环的相关内容,然后如代码中的执行,也能正常打印一个图像,所以我肯定是拷贝循环那里出了问题,但我不明白为什么出了问题,通过文件流获取的图像对象和通过工具箱获取的对象难道不一样吗?我是初学者,现在只有类对象借口及简单gui的知识,如果涉及到流什么的简单和我说一下就行,让我能明白个大概就行。
2,代码中*3的地方前边那个if(i+j>0)让我很是不理解啊,这是书中的例子,使用文件流获取图像对象是书中的内容,我只是想换一下方法获得一个图像对象,没想到行不通,希望大家帮帮忙,先谢过了。新手分不多,见谅
------解决方案--------------------
*3就是复制你的图片啊。只有当i和j都为0的时候不复制,其它都复制。