我有一个简单的绘图程序,使用以下代码设置Jframe的大小:

    frame.setSize(900, 700);


但是,当用户更改窗口的大小时,要绘制的白色区域仍保持相同的大小,因此即使放大窗口,用户也无法绘制。

http://forum.codecall.net/java-tutorials/31180-java-mini-paint-program.html这是我的起点。我扩展了类“ PadDraw”并将大部分代码写到那里,在我的另一个Java文件中,我仅创建一个框架,然后创建了“ PadDraw”对象,创建了一个容器,然后将对象添加到框架的容器中:content。添加(drawPad,BorderLayout.CENTER);

我更改了代码:

public class PadDraw extends JComponent implements ActionListener, ItemListener, ComponentListener{
    public synchronized void addComponentListener(ComponentListener l) {};







我添加了未实现的方法,“ componentResized”为:

public void componentResized(ComponentEvent arg0) {
    System.out.println("Changed ????");

}


但是,当我更改窗口的大小时,什么也没有发生。

一个提示:当我将componentlistener添加到另一个文件而不是drawPad时,componentResized方法标志出现了,但是由于我在此事件发生之前创建了drawPad对象,因此无法更改大小= /

谢谢

最佳答案

希望您不是直接在JFrame上绘制,而是在已添加到JPanel的contentPane的JComponentJFrame中绘制。如果已添加BorderLayout.CENTER,则它应随JFrame展开和收缩而展开和收缩。如果要在BufferedImage上绘图,事情会变得有些棘手,因为必须使用ComponentListener来查看保存BufferedImage的组件何时更改大小,以及何时更改BufferedImage的大小。 ComponentListener而不会丢失已经存在的图形。

如果此答案不够有帮助,请考虑向我们提供有关您当前问题和当前程序的更多具体信息。

在您链接到的程序中,您正在绘制一个Image对象,该对象的大小已设置为首次调用paint。您要做的就是在其自己的构造器中向PadDraw对象添加一个ComponentListener,并在componentResizedPadDraw方法中,使用的新高度和宽度来调整图像的大小。 。但是,如果新尺寸大于旧尺寸,我只会这样做。然后,您还想在将图像变量=设置为新图像之前在新图像上重画旧图像。然后调用重画。

07-24 09:36
查看更多