Java JDialog在Windows 10上有一个隐式最小宽度,如何绕过它?
在Windows10(Java7及以上版本)上,我似乎无法使JDialog小于最小宽度。最小宽度似乎是230px,即使指定新的最小尺寸,也不可能使其变小,如下面的代码所示:Java JDialog在Windows 10上有一个隐式最小宽度,如何绕过它?,java,swing,windows-10,jdialog,Java,Swing,Windows 10,Jdialog,在Windows10(Java7及以上版本)上,我似乎无法使JDialog小于最小宽度。最小宽度似乎是230px,即使指定新的最小尺寸,也不可能使其变小,如下面的代码所示: import javax.swing.*; import java.awt.*; public class TestDialog { public TestDialog() { JDialog testDialog = new JDialog(); testDialog.setSiz
import javax.swing.*;
import java.awt.*;
public class TestDialog {
public TestDialog() {
JDialog testDialog = new JDialog();
testDialog.setSize(new Dimension(10, 100));
testDialog.setMinimumSize(new Dimension(10, 100));
testDialog.setLocationRelativeTo(null);
testDialog.setVisible(true);
}
public static void main(String args[]) {
new TestDialog();
}
}
如何强制JDialog小于该值?是的,将对话框设置为未修饰状态将起作用:
SwingUtilities.invokeLater(() -> {
JDialog testDialog = new JDialog();
testDialog.setUndecorated(true); // ****** here ******
testDialog.setSize(new Dimension(10, 100));
testDialog.setMinimumSize(new Dimension(10, 100));
testDialog.setLocationRelativeTo(null);
testDialog.setVisible(true);
});
不确定是否存在其他解决方案是,将对话框设置为未修饰将起作用:
SwingUtilities.invokeLater(() -> {
JDialog testDialog = new JDialog();
testDialog.setUndecorated(true); // ****** here ******
testDialog.setSize(new Dimension(10, 100));
testDialog.setMinimumSize(new Dimension(10, 100));
testDialog.setLocationRelativeTo(null);
testDialog.setVisible(true);
});
不确定是否存在其他解决方案问题似乎在于默认的外观
当我在设置
testDialog.setUndercorated(true)之后尝试设置不同的装饰样式时代码>根据我的建议,我得到了一个非常狭窄的装饰对话框:
class TestDialog {
public TestDialog() {
JDialog testDialog = new JDialog();
testDialog.setUndecorated( true );
testDialog.getRootPane( ).setWindowDecorationStyle(JRootPane.PLAIN_DIALOG );
testDialog.getContentPane().add(makeContent());
testDialog.setLocationRelativeTo(null);
testDialog.pack();
testDialog.setVisible(true);
}
private JPanel makeContent(){
JPanel pane = new JPanel(new GridLayout(0, 1));
pane.add(new JLabel(" 1 "));
pane.add(new JLabel(" 2 "));
pane.add(new JLabel(" 3 "));
return pane;
}
public static void main(final String args[]) {
new TestDialog();
}
}
问题似乎在于默认的外观
当我在设置testDialog.setUndercorated(true)之后尝试设置不同的装饰样式时代码>根据我的建议,我得到了一个非常狭窄的装饰对话框:
class TestDialog {
public TestDialog() {
JDialog testDialog = new JDialog();
testDialog.setUndecorated( true );
testDialog.getRootPane( ).setWindowDecorationStyle(JRootPane.PLAIN_DIALOG );
testDialog.getContentPane().add(makeContent());
testDialog.setLocationRelativeTo(null);
testDialog.pack();
testDialog.setVisible(true);
}
private JPanel makeContent(){
JPanel pane = new JPanel(new GridLayout(0, 1));
pane.add(new JLabel(" 1 "));
pane.add(new JLabel(" 2 "));
pane.add(new JLabel(" 3 "));
return pane;
}
public static void main(final String args[]) {
new TestDialog();
}
}
我能想到的唯一方法是,尽快对其进行装饰,以获得更好的帮助,添加一个or。2) 这样一个小对话框的目的是什么?1)编辑,2)在狭窄的、堆叠的JLabel(列)中显示数据。我能想到的唯一方法是取消装饰1)以便更快地获得更好的帮助,添加or。2) 这样一个小对话框的目的是什么?1)编辑,2)以狭窄的、堆叠的JLabel(在一列中)显示数据这将删除所有窗口装饰(图标、标题栏、关闭按钮),我仍然需要能够移动窗口和/或关闭它。@Bastien:但是你没有看到这些组件迫使你的对话框保持一定的最小宽度吗?如果你需要移动它,你可以在对话框中添加一个鼠标监听器,以及其他允许你关闭它的东西,但恐怕你不能同时拥有蛋糕和吃掉它。是的,这显然是windows 10的装饰问题,这就是我在最初的帖子中提到操作系统的原因。我知道我可以添加一个鼠标侦听器,这可能是我最终要做的,但在JDialog的情况下,当windows UI应该处理这个问题时,这看起来就像是重新发明了轮子。这会删除所有windows装饰(图标、标题栏、关闭按钮),我仍然需要能够移动窗口和/或关闭它。@Bastien:但是你没有看到这些组件迫使你的对话框保持一定的最小宽度吗?如果你需要移动它,你可以在对话框中添加一个鼠标监听器,以及其他允许你关闭它的东西,但恐怕你不能同时拥有蛋糕和吃掉它。是的,这显然是windows 10的装饰问题,这就是我在最初的帖子中提到操作系统的原因。我知道我可以添加一个鼠标侦听器,这可能是我最终要做的,但在JDialog的情况下,当windows UI应该处理这个问题时,这一切看起来就像是在重新发明轮子。