java - 如何从主程序访问重绘?

标签 java swing graphics graphics2d repaint

我正在开发一个 Java 程序,该程序基本上从文件源渲染图像,然后将该图像绘制到面板(位于框架上)上。

现在我能做的就是调用一行代码

printpanel.getGraphics().drawImage(myimage.globalimage, 0,0, null);

其中 myimage 是包含图像的类。

正如你们很多人所知,这只会打印图像 1 次,如果我调整框架大小,图像就会消失。

现在解决这个问题的方法是将行放入 repaint 方法中,但我现在处于 main 方法中,所以我如何访问定义 repaint 方法并在 main 方法中更改它?

谢谢!

================================================== =================================================== ====

我的代码:

主要类(class):

    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");

    }

}

我的图像类:

    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);
    }
}

关于java - 如何从主程序访问重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22328787/

相关文章:

java - Android 中快速、低功耗/CPU 字符串匹配

java - 如何使用 hibernate <join><any>?

java - 将 JFrame 设置为始终在顶部并禁用其后面的所有 JFrame

java - 如何在 Netbeans 中使用 java 将 JCheckBox 放置在 Jtable 中数据库显示的每个数据旁边?

c++ - 手动检索和存储指向 OpenGL 函数的指针时出现问题

python - 在skimage中绘制渐变椭圆

java - SocksSocketImpl finalize 方法的内存泄漏

java - 当线程在后台运行时,MediaPlayer 不显示视频

java - 拖动组件创建另一个

java - LibGDX:照亮物体,产生阴影