【发布时间】:2011-04-02 01:43:46
【问题描述】:
请注意,我没有在 Windows 机器上仅在 Mac 机器上测试过这个。我不太确定这是否也发生在 Windows 机器上...
当我调整我的 Java 应用程序的大小时,内容是不可见的。我已经找到了一种方法来修复它在调整它的大小之后,但不是在用户正在调整窗口大小。
我没有使用 Swing 或其他东西,因为它使我的二进制文件变得如此缓慢(在我看来)。
结构是这样的:
-
Frame我的主窗口 -
Containermain-window的内容视图
-
-
基于
Container的子视图,包括paint(Graphics g)-方法
-
基于
我已将所有侦听器添加到 My main-window,现在我可以重绘 Content-view 在调整窗口大小后.
public void componentResized(ComponentEvent e) {
this.contentView.paint(this.contentView.getGraphics());
}
我注意到使用paint(getGraphics())-方法并不是一个很好的方法来做到这一点,但由于repaint()-方法根本不做任何事情,这是唯一可行的可能性。
调整大小时,所有绘制的内容都变得不可见。但是,当我将 Button-instance 添加到我的 Content-view 并调整我的 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();
}
当我最小化我的应用程序到 Dock 并再次最大化应用程序时,同样的事情发生了,我猜需要相同的代码来解决这个问题。
我没有使用Graphics2D 之类的,只是Graphics。
您能解释一下如何重新绘制视图吗?
提前致谢, 蒂姆
【问题讨论】:
-
另见“在 AWT 和 Swing 中绘画”java.sun.com/products/jfc/tsc/articles/painting/index.html
-
考虑发布简短的、独立的、正确的(可编译的)示例(SSCCE)来说明问题:sscce.org
-
我建议调查一下为什么您认为 Swing 使您的应用程序如此缓慢,而不是尝试使用 AWT 组件来解决这个限制。
标签: java graphics resize window minimize