如何去除窗口调整大小时的黑色矩形?

问题描述 投票:0回答:1

我正在使用 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从来没有给我这个问题。 有什么办法可以在调整窗口大小时删除黑色矩形吗?

java swing jframe resize window
1个回答
2
投票

我只在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 的外观和感觉来进行窗口装饰。因此,窗口的标题栏和手柄看起来将与以前不同。

© www.soinside.com 2019 - 2024. All rights reserved.