我正在使用 Swing 和 AWT 开发 JFrame 窗口,当我调整窗口大小时,它看起来像这样:
正如您所看到的,很多时候当我调整窗口大小时,它会显示一个正在调整大小的黑色矩形,并且直到您暂停一会儿它才会消失。此外,圆圈并不总是随着我的调整大小事件而准确更新:
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从来没有给我这个问题。 有什么办法可以在调整窗口大小时删除黑色矩形吗?
我只在Windows 10上测试过这个。
这显然与托管 JFrame 的窗口的本机窗口装饰有关。禁用本机窗口装饰时,您可以删除断断续续的大小调整和渗透的黑色背景。请参阅文档
JFrame.setDefaultLookAndFeelDecorated(boolean)
:
提供关于新创建的 JFrame 是否应具有由当前外观提供的窗口装饰(例如边框、用于关闭窗口的小部件、标题...)的提示。如果defaultLookAndFeelDecolated为true,当前的LookAndFeel支持提供窗口装饰,并且当前的窗口管理器支持未装饰的窗口,则新创建的JFrame将具有当前LookAndFeel提供的窗口装饰。否则,新创建的 JFrame 的窗口装饰将由当前窗口管理器提供。
因此,您有两个选择。在创建 JFrame 之前设置一次属性:
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();
或者在创建 JFrame 之后执行:
JFrame frame = new JFrame();
frame.setUndecorated(true);
frame.setWindowDecorationStyle(JRootPane.FRAME);
请注意,无论哪种情况,您都必须使用 Swing 的外观和感觉来进行窗口装饰。因此,窗口的标题栏和手柄看起来将与以前不同。