gpt4 book ai didi

java - 如何成功修改 JFrame(及其所有组件)的绘制方式?

转载 作者:行者123 更新时间:2023-11-30 11:45:45 24 4
gpt4 key购买 nike

我正在尝试在 java 的 swing 库中实现一个简单的窗口缩放。目标只是将窗口的高度和宽度加倍,并按比例绘制窗口及其每个组件。

这是我使用的代码示例:

public class MyWindow extends JFrame {

...

public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.scale(2,2);
super.paint(g);
}
}

此窗口中每个组件的位置和大小是使用 setBounds 手动设置的,窗口布局为空。

当我实际运行该程序时,发生的事情是窗口的第一次绘制似乎成功了——所有内容的大小都合适。然而,组件随后的每次重绘既不是两倍大小,也不是在正确的位置。这就是我的意思:

game view

如您所见,具有手动调用重绘组件(动画位)的屏幕部分似乎没有使用 JFrame 的 Graphics2D 比例。我查看了源代码,并尝试重载其他一些方法(主要是更新和重绘),但它们似乎都产生了相同的结果。我进一步查看了组件类和容器类的 paint 和 repaint 方法,但它们似乎都调用了其父类的指定重绘。我的窗口不应该是“最大”的 parent 吗?如果是这样,为什么这些重绘调用没有到达我的窗口?

因此,我想问你的一个大问题是:子组件调用了父组件的哪些重绘方法?为什么调用没有正确路由到我的 JFrame 的绘制调用?还有其他(更好的)方法可以缩放我的窗口吗?感谢您提供任何帮助!

最佳答案

Painting in AWT and Swing: The Paint Methods 中所述, "Swing 程序应该覆盖 paintComponent() 而不是覆盖 paint()。"一种常见的方法是通过重写 JComponent(或子类)中的 paintComponent() 来创建一个 View ,如图所示 here .让您的 View 监听游戏模型 的变化,如讨论的那样here .

SwingUtilities.updateComponentTreeUI() 应该用于更改 Look & Feel ,不更新 View 。

关于java - 如何成功修改 JFrame(及其所有组件)的绘制方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10200763/

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