我有一个简单的绘图程序,我使用以下代码设置Jframe的大小:
frame.setSize(900, 700);
但是,当用户更改窗口的大小时,要绘制的白色区域仍然保持相同的大小,因此用户无法在放大窗口时进行绘制。
http://forum.codecall.net/java-tutorials/31180-java-mini-paint-program.html这是我从哪里开始的。我扩展了类“PadDraw”并将我的大部分代码写到那里,在我的其他java文件中,我只创建了一个框架,然后我创建了“PadDraw”对象,我创建了一个容器,然后将对象添加到框架的容器:content。 add(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 ????");
}
但是当我改变窗户的大小时,没有任何反应。
一个thougt:当我将componentlistener添加到我的其他文件而不是drawPad,componentResized方法标志,但因为我在此事件发生之前创建了drawPad对象,我无法更改size = /
由于
答案 0 :(得分:2)
希望您不是直接在JFrame
上绘图,而是在JPanel
或JComponent
中添加到JFrame
的contentPane中。如果已添加BorderLayout.CENTER
,那么它应该在JFrame
展开和收缩时展开和收缩。如果您使用BufferedImage
,那么事情会变得有点棘手,因为您必须使用ComponentListener
来查看包含BufferedImage
的组件何时更改大小,以及何时更改,更改BufferedImage
的大小而不会丢失已经存在的图纸。
如果这个答案没有用,请考虑向我们提供有关您当前问题和当前计划的更多具体信息。
在链接到的程序中,您正在绘制一个Image对象,该对象的大小在第一次调用paint时设置。您要做的是在其自己的构造函数中向PadDraw对象添加ComponentListener
,并在ComponentListener
的{{1}}方法中使用{{1}调整图像大小新的高度和宽度。但是,如果新尺寸大于旧尺寸,我只会这样做。然后,您还需要在将image variable =设置为新图像之前重新绘制新图像。然后调用重绘。