我正在研究一个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);
    }
}

10-08 09:08
查看更多