如何在调整窗口大小时删除黑色矩形?

时间:2019-05-04 22:38:31

标签: java swing jframe resize window

我正在使用Swing和AWT开发一个JFrame窗口,当我调整窗口大小时,它看起来像这样:

Window resize

(我为低帧速率表示歉意,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从未给我这个问题。 调整窗口大小后,有什么方法可以删除黑色矩形吗?

1 个答案:

答案 0 :(得分:1)

我只在 Windows 10 上测试过。

这显然与承载 JFrame 的窗口的本机窗口装饰有关。禁用本机窗口装饰时,您可以删除口吃调整大小和黑色背景渗出。请参阅 JFrame.setDefaultLookAndFeelDecorated(boolean) 的文档:

<块引用>

提供有关新创建的 JFrame 是否应具有由当前外观提供的窗口装饰(例如边框、关闭窗口的小部件、标题...)的提示。如果defaultLookAndFeelDecorated 为true,当前LookAndFeel 支持提供窗口装饰,当前窗口管理器支持未装饰窗口,那么新创建的JFrames 的窗口装饰将由当前LookAndFeel 提供。否则,新创建的 JFrame 将由当前窗口管理器提供其窗口装饰。

因此,您有两个选择。在创建 JFrame 之前设置一次属性:

JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame();

或者在创建 JFrame 之后执行:

JFrame frame = new JFrame();
frame.setUndecorated(true);
frame.setWindowDecorationStyle(JRootPane.FRAME);

请注意,无论哪种情况,您都必须使用 Swing 的外观和感觉来装饰窗户。因此,窗口的标题栏和句柄将与以前不同。