我正在开发一个 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/