Это правильно и по замыслу?
Да.
Вы должны понимать основы работы менеджеров по расположению. Одно из заданий менеджера компоновки - установить «расположение» и «размер» компонентов, добавляемых на панель. В случае BorderLayout он отслеживает только 5 компонентов, поэтому диспетчер макета знает только последний компонент, добавленный в CENTER.
Управление макетом не выполняется при добавлении компонентов на панель. Это делается, когда кадр упакован или сделан видимым (или вызывается метод revalidate ()). В этом случае синяя панель не является частью компонентов, управляемых BorderLayout, поэтому ее размер остается (0, 0), что означает, что рисовать нечего.
Попробуйте изменить код на:
JPanel panel1 = new JPanel();
panel1.setSize(200, 200);
и вы увидите синюю панель, окрашенную в указанный размер.
Теперь попробуйте закомментировать:
//panel2.setVisible(false);
и вы увидите обе панели. Это связано с тем, что при добавлении компонентов на панель им назначается ZOrder. По сути, последний добавленный компонент закрашивается первым, поэтому синяя панель отображается поверх красной панели. Проверьте метод setComponentZOrder () класса Container для получения дополнительной информации.
CardLayout - это, вероятно, менеджер компоновки, который вы должны использовать, но вы также можете проверить Схема наложения .