У меня есть набор JMenuItems в JPanel на одном слое JLayeredPane и эмулируемый курсор, нарисованный в JPanel на более высоком уровне. Когда элементы меню перерисовываются, они закрашивают эмулируемый курсор (без запуска перерисовки слоя курсора). Интересно, что если я заменю JButtons или JLabels для пунктов меню, курсор правильно рисуется каждый раз, когда пункты меню перерисовываются.
Как я могу гарантировать, что перерисовка пунктов меню вызовет перерисовку затронутых областей более высоких слоев, без прямого вызова repaint() на многоуровневой панели? Описанная мной ситуация несколько упрощена. из реальности: пункты меню могут быть глубоко вложены в дочерний элемент многоуровневой панели, и они вообще не должны знать о многоуровневой панели.
Вот фрагмент псевдокода, иллюстрирующий то, что я описал:
public void initGui(Dimension size) {
JLayeredPane layeredPane = new JLayeredPane();
layeredPane.setSize(size);
menuPanel = new JPanel();
menuPanel.setSize(size);
layeredPane.add(menuPanel, BOTTOM_LAYER);
JPanel cursorPanel = new CursorPanel();
cursorPanel.setSize(size);
layeredPane.add(cursorPanel, TOP_LAYER);
}
public void showMenu(Component[] menuItems) {
JPanel menu = new JPanel();
for (Component c: menuItems)
menu.add(c);
menuPanel.add(menu);
}