У меня есть несколько кнопок, панели над 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));
Главный экран без щелчка.
Нажмите кнопку OFFSET CENTER и появится панель.
Если я навешиваю на кнопки за панелью, они идут впереди. Но я уже двигаю панель вперед. Должен ли я включать или отключать свойство для кнопок или панели?
ОТВЕТ
Установка уровня панели на POPUP_LAYER или MODAL_LAYER решает проблему.
KHLayered.setLayer(jPManOverSil, javax.swing.JLayeredPane.MODAL_LAYER);
Вместо использования 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 или на веб-сайте, который я дал ранее.
Это намного проще, потому что вам не нужны методы, основанные на действиях!
Хорошая работа!