Под элементами ввода я понимаю такие вещи, как JSpinners и JComboxBoxes. Моя стеклянная панель прошла JPanel, содержащую JSpinners, JComboBoxes и по большей части JLabels. К стеклянному стеклу прикреплен MouseListener. Удивительно то, что mouseEntered вызывается при наведении курсора мыши на элементы ввода и наведении на другие части или пустое пространство JPanel! Это нормальное поведение? Как я могу заставить входные элементы считаться частью JPanel для целей Glasspane?
Вот скриншот моего пользовательского интерфейса с элементами ввода и jLabels.
Вот пример кода:
import javax.swing.*;
public class DialogTest {
public DialogTest() {
JPanel dialogPanel = new JPanel();
SpinnerModel edgeModel = new SpinnerNumberModel(1, 1, 9, 1);
JSpinner edgeSpn = new JSpinner(edgeModel);
dialogPanel.add(edgeSpn);
JDialog initialDialog = new JDialog(new JFrame(), "Test", true);
initialDialog.setContentPane(dialogPanel);
initialDialog.pack();
glass = new GlassComponent(dialogPanel);
initialDialog.setGlassPane(glass);
glass.setOpaque(false);
glass.setVisible(true);
initialDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
initialDialog.setVisible(true);
}
}
public class GlassComponent implements MouseListener {
JPanel c;
public GlassComponent(JPanel c) {
this.c = c;
this.c.addMouseListener(this);
}
...
public mouseEntered(MouseEvent e) {
System.out.println("Entered JPanel");
}
}
В порядке объяснения, моя цель - в конечном итоге использовать GlassPane для блокировки ввода для тех элементов, которые отмечены знаком запрета. Однако, учитывая, что mouseListener, назначенный для dialogPanel, по-видимому, генерирует новые события после выхода из элементов ввода, у меня могут быть некоторые трудности в достижении этого.