JDialog имеет неявную минимальную ширину в Windows 10, как это обойти? - PullRequest
0 голосов
/ 28 ноября 2018

Кажется, я не могу сделать мой 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 голосов
/ 28 ноября 2018

Похоже, проблема заключается в том, как выглядит и работает по умолчанию.Когда я попытался установить другой стиль оформления после установки testDialog.setUndecorated( true );, как предложено Hovercraft Full Of Eels , я получил очень узкий оформленный диалог:

    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

0 голосов
/ 28 ноября 2018

Да, если установить диалоговое окно без декорации, будет работать:

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

Не уверен, что существуют другие решения

...