请注意,我没有在 Windows 机器上仅在 Mac 机器上对此进行过测试。我不太确定这是否也发生在 Windows 机器上......
当我调整我的 Java 应用程序的大小时,内容是不可见的。我已经找到了一种在调整大小后修复它的方法,但不是在用户调整窗口大小时。
我没有使用 Swing 或其他东西,因为它使我的二进制文件变得如此缓慢(在我看来)。
结构是这样的:
Frame
我的主窗口Containe
r内容视图main-window
Container
paint(Graphics g)
基于- 方法的子视图
我已经添加了所有侦听器My main-window
,现在我可以在调整窗口大小后重绘内容视图。
public void componentResized(ComponentEvent e) {
this.contentView.paint(this.contentView.getGraphics());
}
我提防使用paint(getGraphics())
- 方法并不是一个很好的方法来做到这一点,但由于repaint()
- 方法根本不做任何事情,它是唯一可行的可能性。
调整大小时,所有绘制的内容都变得不可见。但是,当我将Button
-instance 添加到 myContent-view
并调整 my 大小Main-window
时,按钮不会变得不可见。
我能够追踪“实时”调整大小事件:
public void componentMoved(ComponentEvent e) {
System.out.println("Live-resize");
}
- 当我开始调整大小时,不会调用此方法。
- 在调整大小时,它会在我的日志中生成“实时调整大小”,我调整窗口大小的每个像素。
- 当我停止调整大小时,不会调用此方法,componentResized-method 会调用。
当我将我的重绘方法(或官方重绘方法)添加到这样的“实时”调整大小事件中时,我仍然得到输出,但是,它不是重绘之类的
public void componentMoved(ComponentEvent e) {
System.out.println("Live-resize");
this.contentView.paint(this.contentView.getGraphics());
}
或者
public void componentMoved(ComponentEvent e) {
System.out.println("Live-resize");
this.contentView.repaint();
}
当我将应用程序最小化到扩展坞并再次最大化应用程序时,会发生同样的事情,我想需要相同的代码来解决这个问题。
我没有使用Graphics2D
什么的,只是Graphics
。
你能解释一下我如何重新绘制视图吗?
在此先感谢,蒂姆