Как заставить JPanel оставаться поверх другой JPanel с setSized

Я просмотрел другие потоки стека и многие другие примеры с JLayeredPane, но не могу решить свою проблему.

Класс Frame -> Основной класс JPanel -> 2 класса JPanel

У меня есть основная панель JPanel, установленная как макет границы, и у меня есть 2 панели JPanel, установленные как север и юг в основной панели JPanel. Северная JPanel имеет setPreferredSize.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я уменьшаю размер окна, южная панель, где у меня есть объявленные кнопки, скрывается. Даже если окно уменьшено, я все равно хочу, чтобы кнопки (южная панель) были видны пользователям.

JPanel mainPanel = new JPanel(new BorderLayout());

//North panel
JPanel northPanel = new JPanel();
northPanel.setLayout(new GridBagLayout());
northPanel.setPreferredSize(new Dimension(600, 350));
northPanel.add(example..)
......

//South panel
JPanel southPanel = new JPanel(new BorderLayout()););
JButton button1 = new JButton();
JButton button2 = new JButton();
southPanel.add(button1, BorderLayout.WEST);
southPanel.add(button2, BorderLayout.EAST);

//Add north and south panels to main panel
this.mainPanel.add(northPanel, BorderLayout.NORTH); 
this.mainPanel.add(southPanel, BorderLayout.SOUTH); //want these buttons 
//to be visible even when window size is reduced. 
//but now the buttons gets hidden behind the north panel.

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

Надеюсь, мое объяснение имеет смысл, и спасибо!


person In-young Choung    schedule 26.03.2018    source источник
comment
Для достижения наилучших результатов опубликуйте свой минимально воспроизводимый пример кода с вашим вопросом.   -  person Hovercraft Full Of Eels    schedule 26.03.2018


Ответы (1)


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

Компонент на панели окрашивается на основе его ZOrder. Когда компонент добавляется к панели, ему присваивается более высокий ZOrder. Swing сначала рисует компоненты с наивысшим значением ZOrder.

Итак, вместо того, чтобы делать:

panel.setLayout( new BorderLayout() );
panel.add( new JButton("NORTH"), BorderLayout.NORTH );
panel.add( new JButton("SOUTH"), BorderLayout.SOUTH );

Ты можешь сделать:

panel.setLayout( new BorderLayout() );
panel.add( new JButton("SOUTH"), BorderLayout.SOUTH );
panel.add( new JButton("NORTH"), BorderLayout.NORTH );

Теперь кнопка «Юг» будет нарисована поверх кнопки «Север». Конечно, это будет работать, только если южный компонент непрозрачен.

person camickr    schedule 26.03.2018
comment
мой Бог!! да это работает!! это так просто, и я понятия не имел. Спасибо :) - person In-young Choung; 26.03.2018