【问题标题】:How to Remove Black Rectangle on Window Resize?如何在窗口调整大小时删除黑色矩形?
【发布时间】:2019-09-23 00:54:52
【问题描述】:

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

【问题讨论】:

  • 您需要展示更多代码。就像你在哪里覆盖paintComponent()。并且不要执行以下操作:1) 扩展 JFrame,2) 在 JFrame() 中覆盖 Paint。您应该创建一个 JPanel 并在其中绘制。
  • 据我所知,没有什么好的办法可以解决这个问题。 Windows 操作系统负责管理无法从 Java 中控制的窗口大小调整的许多方面。我的建议是尝试调用“paintImmediately(...)”而不是“repaint()”。您还可以将 JFrame 的背景设置为白色,这样就不会那么明显了。
  • 不确定为什么要不断更新约束。我建议您可以使用不同的布局管理器,也许是 BorderLayout。
  • @WJS 这正是我所做的。
  • @camickr 我更新了我的约束以确保有圆圈的面板总是和窗口一样大,这样它就不会离开屏幕。

标签: java swing jframe resize window


【解决方案1】:

我只在 Windows 10 上测试过。

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

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

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

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

或者在创建JFrame之后再做:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2014-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    相关资源
    最近更新 更多