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 解决了这个问题。
我创建了一个面板来允许一些用户输入。此面板需要覆盖应用程序的主要 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 解决了这个问题。