我正在开发一个Java程序,它基本上从文件源渲染图像,然后将该图像绘制到面板上(在一个框架上)。
现在我能够做的是调用一行代码
printpanel.getGraphics().drawImage(myimage.globalimage, 0,0, null);
其中myimage
是包含图像的类。
许多人都知道,这只会打印一次图像,如果我调整图像大小,图像就会消失。
现在解决这个问题的方法是将行放入repaint
方法,但我现在使用的是main
方法,那么如何访问{{1}的定义方法并在repaint
方法中更改它?
谢谢!
=============================================== ================================================== ====
我的代码:
主要课程:
main
myimage类:
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");
}
}
答案 0 :(得分:1)
我不确定我是否完全理解,但如果您想要做的是在窗口内显示带有图像的面板,则应该将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);
}
}
答案 1 :(得分:1)
现在我能做的是调用表单的一行代码
printpanel.getGraphics().drawImage(myimage.globalimage, 0,0, null);
不要那样做。您的printPanel
应该已经拥有paintComponent
方法,其中包含drawImage
。
Image image;
...
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null) {
g.drawImage(image, ..., this); // this is the ImageObserver. Should not be null
}
}
如果你想改变它,你可以为它设置一个setter
public void setImage(Image image) {
this.image = image;
repaint();
}
只需使用您要更改的图片调用该方法
没有办法绕过它。您需要@Override
paintComponent
的{{1}}方法。调整帧大小时,将自动调用JPanel
,将图像保留在那里。应该使用repaint()
方法绘制图像。如果要使用paintComponent
Image
参数
答案 2 :(得分:1)
许多人都知道,这只会打印一次图像,如果我调整图像大小,图像就会消失。
框架调整大小时有什么要求?