我正在开发一个java程序,它基本上是从文件源渲染一个图像,然后将该图像绘制到一个面板(在一个框架上)。
现在我能做的是调用一行
printpanel.getGraphics().drawImage(myimage.globalimage, 0,0, null);
哪里 myimage
是包含图像的类。
很多人都知道,这只会打印一次图像,如果我调整帧的大小,图像就会消失。
现在解决这个问题的方法是把线放到 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()
{
}
}
3条答案
按热度按时间ddhy6vgd1#
很多人都知道,这只会打印一次图像,如果我调整帧的大小,图像就会消失。
调整框架尺寸时您的要求是什么?
你把图像画成原来的尺寸了吗?如果是这样,那么只需使用带有imageicon的jlabel并将标签添加到框架中
您想让图像与框架的大小成比例吗?那你需要做定制画。您可以创建自定义组件,如其他答案中所示。或者您可以使用带有拉伸图标的jlabel,该图标将拉伸以填充标签可用的空间。
6psbrbz92#
我不确定我是否完全理解,但是如果您想在窗口中显示一个带有图像的面板,您应该为jpanel(或任何其他您想要的面板)创建子类,并重写paintcomponent方法来绘制图像。大致如下:
shyt4zoc3#
现在我能做的是调用一行
printpanel.getGraphics().drawImage(myimage.globalimage, 0,0, null);
不,不要那样做。你的printPanel
应该已经有了paintComponent
方法,使用drawImage
在里面。如果你想改变的话,你可以给它一个设定器
只需使用要更改的图像调用该方法
编辑
这是没办法的。你需要
@Override
这个paintComponent
方法JPanel
. 调整框架大小时,repaint()
将自动调用,将图像保留在那里。图像应绘制在paintComponent
方法。你可以让面板的构造器Image
参数,如果您希望以这种方式示例化ImageObject