我有一个简单的绘图程序,使用以下代码设置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的JComponent
或JFrame
中绘制。如果已添加BorderLayout.CENTER
,则它应随JFrame
展开和收缩而展开和收缩。如果要在BufferedImage
上绘图,事情会变得有些棘手,因为必须使用ComponentListener
来查看保存BufferedImage
的组件何时更改大小,以及何时更改BufferedImage
的大小。 ComponentListener
而不会丢失已经存在的图形。
如果此答案不够有帮助,请考虑向我们提供有关您当前问题和当前程序的更多具体信息。
在您链接到的程序中,您正在绘制一个Image对象,该对象的大小已设置为首次调用paint。您要做的就是在其自己的构造器中向PadDraw对象添加一个ComponentListener
,并在componentResized
的PadDraw
方法中,使用的新高度和宽度来调整图像的大小。 。但是,如果新尺寸大于旧尺寸,我只会这样做。然后,您还想在将图像变量=设置为新图像之前在新图像上重画旧图像。然后调用重画。