我正在研究一个Java程序,该程序基本上从文件源呈现图像,然后将该图像绘制到面板(在框架上)上。
现在我能做的就是调用以下形式的代码行
printpanel.getGraphics().drawImage(myimage.globalimage, 0,0, null);
其中
myimage
是包含图像的类。众所周知,这只会打印图像1次,如果我调整框架的大小,图像会消失。
现在解决此问题的方法是将行放入
repaint
方法中,但是我现在在main
方法中,因此我该如何访问repaint
方法的定义并从内部更改它main
方法?谢谢!
================================================== ================================================== =
我的代码:
主要类别:
package imagetester;
import java.awt.image.*;
import javax.swing.*;
import javax.imageio.*;
import java.awt.Graphics2D.*;
import java.io.*;
public class Imagetester
{
public static void main(String[] args)
{
JFrame printframe = new JFrame("The drawing frame");
JPanel printpanel = new JPanel();
printframe.setSize(700,700);
printpanel.setSize(700,700);
printframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
printframe.add(printpanel);
printpanel.setVisible(true);
printframe.setVisible(true);
Imageobject myimage = new Imageobject();
try
{
myimage.setImage("word.jpg");
}
catch(IOException e)
{
System.out.println("the image failed!");
}
printpanel.getGraphics().drawImage(myimage.globalimage, 0,0, null);
printpanel.repaint();
System.out.println("hi");
}
}
myimage类:
package imagetester;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Imageobject
{
BufferedImage globalimage;
public void setImage(String filename) throws IOException
{
globalimage = ImageIO.read(new File(filename));
}
public void Imagebject()
{
}
}
最佳答案
我不确定我是否完全理解,但是如果您想做的是在窗口内显示带有图像的面板,则应该子类化JPanel(或您想要的任何其他面板),并重写paintComponent方法来绘制图片。类似于以下内容:
public class ImagePanel extends JPanel {
private Image image;
public ImagePanel(Image image) {
this.image = image;
}
@Override
protected void paintComponent(graphics g) {
g.drawImage(image, 0, 0, this);
}
}