如何动态更改JFrame大小

时间:2011-10-10 18:32:37

标签: java swing size jframe

我有一个简单的绘图程序,我使用以下代码设置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 = /

由于

1 个答案:

答案 0 :(得分:2)

希望您不是直接在JFrame上绘图,而是在JPanelJComponent中添加到JFrame的contentPane中。如果已添加BorderLayout.CENTER,那么它应该在JFrame展开和收缩时展开和收缩。如果您使用BufferedImage,那么事情会变得有点棘手,因为您必须使用ComponentListener来查看包含BufferedImage的组件何时更改大小,以及何时更改,更改BufferedImage的大小而不会丢失已经存在的图纸。

如果这个答案没有用,请考虑向我们提供有关您当前问题和当前计划的更多具体信息。

在链接到的程序中,您正在绘制一个Image对象,该对象的大小在第一次调用paint时设置。您要做的是在其自己的构造函数中向PadDraw对象添加ComponentListener,并在ComponentListener的{​​{1}}方法中使用{{1}调整图像大小新的高度和宽度。但是,如果新尺寸大于旧尺寸,我只会这样做。然后,您还需要在将image variable =设置为新图像之前重新绘制新图像。然后调用重绘。