JDialog在Windows 10上具有隐式最小宽度,如何绕过它?

时间:2018-11-28 02:51:13

标签: java swing windows-10 jdialog

我似乎无法使JDialog小于Windows 10上的最小宽度(观察到Java 7及更高版本)。最小宽度似乎为230像素,即使指定了新的最小尺寸,也无法使其变小,如下面的代码所示:

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();
    }
}

minimum width jdialog

如何强制JDialog小于该值?

2 个答案:

答案 0 :(得分:2)

问题似乎是默认的外观。
当我按照 Hovercraft Full Of Eels的建议设置testDialog.setUndecorated( 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();
    }
}

enter image description here

答案 1 :(得分:1)

是的,将对话框设置为未修饰将起作用:

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);
});

不确定是否存在其他解决方案