我正在尝试在 java 的 swing 库中实现一个简单的窗口比例。目标只是将窗口的高度和宽度加倍,并按比例绘制窗口及其每个组件。
这是我正在使用的代码示例:
public class MyWindow extends JFrame {
...
public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.scale(2,2);
super.paint(g);
}
}
此窗口中每个我的组件的位置和大小是使用 setBounds 手动设置的,窗口布局为空。
当我实际运行程序时,窗口的第一次绘制似乎成功了——一切都调整了合适的大小。然而,组件随后的每次重绘既不是两倍大小,也不是在正确的位置。这就是我的意思:
如您所见,具有手动调用重绘的组件(动画位)的屏幕部分似乎没有使用 JFrame 的 Graphics2D 比例。我查看了源代码,并尝试重载其他一些方法(主要是更新和重绘),但它们似乎都产生了相同的结果。我进一步查看了组件和容器类的paint和repaint方法,但它们似乎都调用了它们父类的指定repaint。我的 Window 不应该是“最大”的父母吗?如果是这样,为什么这些重绘调用没有到达我的窗口?
因此,我对您的最大问题是:子组件调用父组件的哪些重绘方法?为什么调用没有正确路由到我的 JFrame 的绘制调用?还有其他(更好的)方法可以缩放我的窗口吗?任何和所有的帮助表示赞赏!