Java 的 JOptionPane 对话框 window 太小了?

Java's JOptionsPane dialog window too small?

我创建了一个面板来允许一些用户输入。此面板需要覆盖应用程序的主要 window,通常标记为 'alwaysOnTop'。所以输入面板使用 JOptionPane 显示如下:

ConfigurationPanel cp = new ConfigurationPanel();
cp.setDuration(total);
JWindow window = (JWindow) SwingUtilities.getWindowAncestor(TimerPanel.this);
window.setAlwaysOnTop(false);
if (JOptionPane.showConfirmDialog(TimerPanel.this, cp, "Settings", JOptionPane.OK_CANCEL_OPTION) == JOptionPane.OK_OPTION) {
    // if successfull, take data
    try {
        total = cp.getDuration();
        savePreferences();
        reset();
    } catch (DateTimeParseException dtpe) {
        // do nothing
    }
}
window.setAlwaysOnTop(true);

ConfigurationPanel 是使用 NetBeans GUI 构建器创建的,它在 20 年内从未让我失望过,所以我从未真正检查过。但是因为它被提到我检查了并且 cnnstructor 调用了 initComponents(),它又包含这些行:

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
    this.setLayout(layout);

这是面板本身的样子(来自 Netbeans IDE 的屏幕截图):

这就是组合在运行时的样子:

为什么主按钮“确定”和“取消”没有正确显示?这在过去有效,而且问题似乎出在我的代码之外...

这似乎发生在基于 Windows 10 的 Oracle Java 13.0.1+9 和 15.0.1+9-18 以及 OpenJDK 16.0.1+9-24 上。

从 GroupLayout(Netbeans 的默认布局)切换到 GridBagLayout 解决了这个问题。