Чому я тільки додаю останню JPanel до розміру JFrame?

Тому я працюю над додаванням графічного інтерфейсу, використовуючи рамки зміни. Словом, у мене є 3 JPanels, які діють як різні думки моєї програми. Тепер проблема полягає в тому, що незалежно від порядку, я додаю JPanels до мого JFrame, лише коли я перемикаюсь на це представлення, лише остання фінальна JPanel змінює розмір.

Деякі релевантні біти коду:

При створенні вікна я спочатку створюю кожну окрему JPanel і додаю її до JFrame:

 JPanel newPanel = new SomeClassExtendingJPanel();
 this.jframe.add(newPanel);

Далі, коли я перемикаюсь між представленнями програми, я приховую активну панель:

 jframe.validate();
 jframe.repaint();
 oldPanel.setVisible(false);

А потім активізуйте панель, яка буде показана:

 jframe.validate();
 jframe.repaint();
 newPanel.setVisible(true);

Хто-небудь знає, що може бути неправильним?

2

2 Відповіді

ContentPane JFrame реалізував BorderLayout за замовчуванням, і це можливо поставити лише один JComponents до одного Area

you have to change used LayoutManager or put another JPanels to the other Areas

2
додано

Щоб змінити розмір JFrame за допомогою кожного обміну, ви можете викликати на ньому код pack() , але це постійно змінюється розміром графічного інтерфейсу користувача kludgy. Кращим рішенням є використання механізму Swing для обміну думками - CardLayout. Це дозволить розмістити контейнер до найбільшого розміру, необхідного для адекватного відображення всіх компонентів "картки".

Перегляньте Підручник з CardLayout та API CardLayout , щоб дізнатися більше про це.

2
додано
Де повинен бути макетом? Якщо я, скажімо, створіть новий JPanel, який виступатиме як контейнер для всіх інших JPanels, чи буде JPanel насправді змінювати розмір, коли змінюється розмір JFrame?
додано Автор Bartvbl, джерело
це працювало .. спасибі І може гойтися гойдатися.
додано Автор Bartvbl, джерело
Див. Приклад вкладеного макета , щоб дізнатися, як об'єднати макети.
додано Автор Andrew Thompson, джерело
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників