gpt4 book ai didi

java - 如何动态更改 JFrame 大小

转载 作者:行者123 更新时间:2023-12-02 08:09:05 26 4
gpt4 key购买 nike

我有一个简单的绘图程序,我使用以下代码设置 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 上绘图,而是在已添加到 JFrame 的 JPanelJComponent 中绘图 的 contentPane。如果已添加 BorderLayout.CENTER,那么它应该随着 JFrame 扩展和收缩而扩展和收缩。如果您在 BufferedImage 上绘图,事情会变得有点棘手,因为您必须使用 ComponentListener 来查看何时保存 BufferedImage 的组件code> 更改大小,当更改大小时,更改 BufferedImage 的大小,而不会丢失已有的绘图。

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

在您链接到的程序中,您正在一个 Image 对象上绘图,该对象的大小是在第一次调用 Paint 时设置的。您需要做的是将 ComponentListener 添加到 PadDraw 对象的构造函数中,以及在 ComponentListenercomponentResized 方法中,使用 PadDraw 的新高度和宽度调整图像大小。但是,只有当新尺寸大于旧尺寸时,我才会这样做。然后,在将图像变量 = 设置为新图像之前,您还需要在新图像上重绘旧图像。然后调用重绘。

关于java - 如何动态更改 JFrame 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7717066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com