Панель в JLayeredPane показывает кнопки позади нее

1

У меня есть несколько кнопок, панели над JLayeredPane.

Когда я нажимаю кнопку, панель отображается с помощью setvisible (true). Но если есть кнопка за панелью, и я нажимаю на кнопку кнопки, появляется над панелью.

Я использую JLayeredPane для перемещения панели спереди.

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

   private void jbOffCenActionPerformed(java.awt.event.ActionEvent evt) {                                        
    if(!offsetedilmis)
    {
    jPOffsetSor.setVisible(true);
    KHLayered.moveToFront(jPOffsetSor);
    offsetedilmis = true;
    jbOffCen.setText("<html><center>RESET<br>CENTRE");
    }
    else if(offsetedilmis)
    {
    jbOffCen.setText("<html><center>OFFSET<br>CENTRE");
    offsetedilmis = true;
    }
}  

Кстати, я использую дизайнер netbeans.

Автоматически сгенерированный код для добавления панели в JLayeredPanel:

KHLayered.add(jPOffsetSor, new org.netbeans.lib.awtextra.AbsoluteConstraints(120, 250, 450, 150));

Главный экран без щелчка. Изображение 174551

Нажмите кнопку OFFSET CENTER и появится панель. Изображение 174551

Если я навешиваю на кнопки за панелью, они идут впереди. Но я уже двигаю панель вперед. Должен ли я включать или отключать свойство для кнопок или панели? Изображение 174551

  • 3
    Чтобы быстрее помочь, опубликуйте MCVE (Минимальный завершенный и проверяемый пример).
Теги:
swing
jpanel
jlayeredpane

2 ответа

0
Лучший ответ

ОТВЕТ

Установка уровня панели на POPUP_LAYER или MODAL_LAYER решает проблему.

 KHLayered.setLayer(jPManOverSil, javax.swing.JLayeredPane.MODAL_LAYER);
1

Вместо использования Jpanel для отображения сообщения вы можете попробовать использовать диалоговое окно.

В этом примере вы можете использовать (попробуйте этот код, но он может содержать ошибки):

Object[] options = {"<html><center>RESET<br>CENTRE",
                "<html><center>OFFSET<br>CENTRE"};
int n = JOptionPane.showOptionDialog(frame,
"Left click...", // the title of the window
"Pop-up window", // the meassage in the window
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, 
options,  //the titles of buttons
options[0]); 

У вас есть много других вариантов. вы можете изучить его в api или на веб-сайте, который я дал ранее.

Это намного проще, потому что вам не нужны методы, основанные на действиях!

Хорошая работа!

  • 0
    На самом деле я знаю эти окна (диалоговое окно, фрейм и т. Д.), Но в соответствии с документацией docs.oracle.com/javase/tutorial/uiswing/components/… это должно работать. Но если я не могу понять это, я собираюсь использовать их. Спасибо за совет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню