请注意,我只在Mac机器上测试过此方法,不确定它是否也适用于Windows机器...
当我调整Java应用程序的大小时,内容是不可见的。 我已经找到了一种方法来在调整大小之后修复它,但不能在用户调整窗口大小时修复。
我没有使用Swing或其他东西,因为它会使我的二进制文件变得很慢(在我看来)。
结构如下:
- 主窗口“Frame” - 内容视图“Container”属于主窗口 - 基于“Container”的子视图,包括“paint(Graphics g)”方法
我已将所有监听器添加到“我的主窗口”中,现在我能够在调整窗口大小后重绘“Content-view”。
当我将应用程序最小化到dock并再次将应用程序最大化时,同样的事情发生了,我猜需要相同的代码来修复这个问题。我没有使用Graphics2D或其他东西,只是使用Graphics。您能否请解释一下如何重新绘制视图?谢谢提前, Tim
当我调整Java应用程序的大小时,内容是不可见的。 我已经找到了一种方法来在调整大小之后修复它,但不能在用户调整窗口大小时修复。
我没有使用Swing或其他东西,因为它会使我的二进制文件变得很慢(在我看来)。
结构如下:
- 主窗口“Frame” - 内容视图“Container”属于主窗口 - 基于“Container”的子视图,包括“paint(Graphics g)”方法
我已将所有监听器添加到“我的主窗口”中,现在我能够在调整窗口大小后重绘“Content-view”。
public void componentResized(ComponentEvent e) {
this.contentView.paint(this.contentView.getGraphics());
}
我意识到使用 paint(getGraphics())
方法不是一个很好的做法,但是因为 repaint()
方法根本什么都没做,这是唯一可行的方法。
当调整大小时,所有绘制的内容都会变得不可见。然而,当我在我的 Content-view
中添加一个 Button
实例并调整我的 Main-window
大小时,按钮不会变得不可见。
我可以跟踪“实时”调整大小事件:
public void componentMoved(ComponentEvent e) {
System.out.println("Live-resize");
}
- 当我开始调整大小时,这个方法没有被调用。
- 在调整大小时,每当我改变窗口大小一个像素,日志中都会生成“实时调整大小”。
- 当我停止调整大小时,这个方法没有被调用,会调用componentResized方法。
当我将repaint方法(或官方的repaint方法)添加到“实时”调整大小事件中时,我仍然可以得到输出,但它不会重新绘制或产生其他影响。
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();
}
当我将应用程序最小化到dock并再次将应用程序最大化时,同样的事情发生了,我猜需要相同的代码来修复这个问题。我没有使用Graphics2D或其他东西,只是使用Graphics。您能否请解释一下如何重新绘制视图?谢谢提前, Tim