我正在使用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从未给我这个问题。 调整窗口大小后,有什么方法可以删除黑色矩形吗?
答案 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 的外观和感觉来装饰窗户。因此,窗口的标题栏和句柄将与以前不同。