Java setPreferredSize () не работает

Это моя первая попытка работать с Java, поэтому, пожалуйста, не беспокойтесь. Я просмотрел другие вопросы по JFrame и просто не смог найти рабочего решения.

По какой-то причине я не могу заставить работать setPreferredSize или setSize.

Окно по-прежнему имеет другой размер по умолчанию. setMinimumSize вроде работает нормально. Похоже, что я читал setMaximumSize с прослушиванием.

В конечном итоге я просто пытаюсь установить для окна определенный неизменяемый размер.

    public LauncherFrame(@NonNull Launcher launcher) {
        super(tr("launcher.title", launcher.getVersion()));

        this.launcher = launcher;
        instancesModel = new InstanceTableModel(launcher.getInstances());

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        initComponents();
        setPreferredSize(new Dimension(900, 600));
        setMinimumSize(new Dimension(600, 300));
        setResizable(false);
        pack();
        setLocationRelativeTo(null);

        SwingHelper.setFrameIcon(this, Launcher.class, "icon.png");

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                loadInstances();
            }
        });
    }

* ОБНОВИТЬ *

ВАУ ок ... Я идиот !!! Причина, по которой размер не работал, заключалась в том, что размер устанавливался извне в другом названном файле ... Спасибо всем за помощь. Я отметил, какой ответ был бы правильным.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы вызываете pack();, который упакует фрейм в другой размер. Просто удалите вызов pack();.

The pack method sizes the frame so that all its contents are at or above their preferred sizes. An alternative to pack is to establish a frame size explicitly by calling setSize or setBounds (which also sets the frame location).

для получения дополнительной информации посмотрите этот пост Что делает .pack ()?

Как бы то ни было, если это все еще не удается, вы можете попробовать использовать setSize()

    setPreferredSize(new Dimension(900, 600));
    setSize(new Dimension(900, 600));
    setMinimumSize(new Dimension(600, 300));

Хм, вроде не изменилось. Я тоже очень надеялся. Это тоже казалось очевидным решением. Возможно, что-то еще мешает размеру. Могу я заставить это?

Atomiklan 06.11.2018 10:58

Что делает initComponents? стая казалась очевидной причиной этого.

SamHoque 06.11.2018 10:59

Обновил свой ответ.

SamHoque 06.11.2018 11:01

Да, понятия не имею. Может еще кто-нибудь сможет помочь

SamHoque 06.11.2018 11:12

Спасибо за попытку! Я ценю это!

Atomiklan 06.11.2018 11:13

Я отметил ваш ответ правильным. Смотрите мое обновление. Спасибо вам за помощь!

Atomiklan 06.11.2018 22:17

Вы вызываете метод initComponents() перед тем, как установить размер окна.

Таким образом, вы рисуете все окно и устанавливаете размер после этого, в результате чего установленный вами размер игнорируется.

Я предлагаю передать 2 объекта Измерение методу initComponents; 1 для preferredSize и один для minimumSize.

Затем сначала установите размер и рисовать на экране после этого.

Надеюсь, это помогло.

Было бы здорово, если бы в вашем коде были содержательные комментарии. Это причина, по которой вообще существует комментирование. Может быть, попробуйте launcher.setSize() (или независимо от того, какой у вас фрейм, вы пытаетесь установить размер для) вместо того, чтобы вызывать просто setSize(). ПОМНИТЬ вы должны установить размер, прежде чем рисовать окно или панель, чтобы они были правильно отрисованы

Soutzikevich 06.11.2018 11:48

Нет, это тоже не так. Кроме того, оказывается, что initComponents не влияли на это. Я удалил эти участки кода, но окно по-прежнему не принимает заданный размер.

Atomiklan 06.11.2018 12:12

Что ж, если вы хотите, вы можете добавить комментарии к своему коду и опубликовать его здесь, а я посмотрю, что я могу сделать, чтобы помочь.

Soutzikevich 06.11.2018 12:14

Постараюсь завтра. Солнце встает, ха-ха. Наверное, нужно лечь спать. Спасибо вам за помощь!

Atomiklan 06.11.2018 12:38

Другие вопросы по теме