Автоматически размер JPanel в JFrame

У меня есть a JPanel подкласс, на котором я добавляю кнопки, маркировки, таблицы, и т.д. Для показа на экране его, я использую JFrame:

MainPanel mainPanel = new MainPanel(); //JPanel subclass

JFrame mainFrame = new JFrame();
mainFrame.setTitle("main window title");
mainFrame.getContentPane().add(mainPanel);
mainFrame.setLocation(100, 100);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Но когда я измеряю окно, размер панели не изменяются. Как сделать размер панели для совпадения с размером окна, даже если это было изменено?

11
задан Andrew Thompson 29 August 2019 в 10:14
поделиться

4 ответа

Можно установить менеджера по расположению как BorderLayout и затем определить более конкретно, куда панель должна пойти:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.add(mainPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);

Это помещает панель в центральную область кадра и позволяет ему вырасти автоматически при изменении размеров кадра.

14
ответ дан 3 December 2019 в 06:48
поделиться

Необходимо установить менеджера по расположению для JFrame для использования - Это имеет дело с тем, как расположены компоненты. Полезный является менеджером BorderLayout.

Просто добавление следующей строки кода должно решить Ваши проблемы:

mainFrame.setLayout(new BorderLayout());

(Сделайте это перед добавляющими компонентами к JFrame),

2
ответ дан 3 December 2019 в 06:48
поделиться

Как в других плакатах было сказано, необходимо изменить используемый LayoutManager. Я всегда предпочитал использовать GridLayout, таким образом, Ваш код станет:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new GridLayout());
mainFrame.pack();
mainFrame.setVisible(true);

GridLayout кажется более концептуально корректным мне, когда Вы хотите, чтобы Ваша панель заняла весь экран.

0
ответ дан 3 December 2019 в 06:48
поделиться

Если возможность BorderLayout, предоставленная нашими друзьями doesnot работа, пытается добавить ComponentListerner к JFrame и реализует componentResized (событие) метод. Когда объект JFrame будет изменен, этот метод назовут. Таким образом, если Вы напишете код для установки размера JPanel в этом методе, то Вы достигнете намеченного результата.

Ya, я знаю, что это 'решение' не хорошо, но используйте его в качестве системы поддержки.;)

1
ответ дан 3 December 2019 в 06:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: