【发布时间】:2019-09-23 00:54:52
【问题描述】:
我正在使用 Swing 和 AWT 开发一个 JFrame 窗口,当我调整窗口大小时,它看起来像这样:
(我为低帧率道歉,stackoverflow 不接受更大的文件大小)
如您所见,很多时候当我调整窗口大小时,它会显示一个正在调整大小的黑色矩形,并且在您暂停片刻之前它不会消失。此外,圆圈并不总是随着我的调整大小事件而准确更新:
frame.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent componentEvent) {
width = frame.getWidth();
height = frame.getHeight();
springLayout.putConstraint(SpringLayout.SOUTH, panel, height, SpringLayout.NORTH, frame.getContentPane());
springLayout.putConstraint(SpringLayout.EAST, panel, width, SpringLayout.WEST, frame.getContentPane());
panel.repaint();
}
});
这不是重点(尽管这两个问题可能是相关的)。我只在使用 Swing 时遇到过这个问题。 JavaFX 从来没有给我这个问题。 有什么方法可以在调整窗口大小时移除黑色矩形?
【问题讨论】:
-
您需要展示更多代码。就像你在哪里覆盖paintComponent()。并且不要执行以下操作:1) 扩展 JFrame,2) 在 JFrame() 中覆盖 Paint。您应该创建一个 JPanel 并在其中绘制。
-
据我所知,没有什么好的办法可以解决这个问题。 Windows 操作系统负责管理无法从 Java 中控制的窗口大小调整的许多方面。我的建议是尝试调用“paintImmediately(...)”而不是“repaint()”。您还可以将 JFrame 的背景设置为白色,这样就不会那么明显了。
-
不确定为什么要不断更新约束。我建议您可以使用不同的布局管理器,也许是 BorderLayout。
-
@WJS 这正是我所做的。
-
@camickr 我更新了我的约束以确保有圆圈的面板总是和窗口一样大,这样它就不会离开屏幕。
标签: java swing jframe resize window