【发布时间】:2011-08-05 20:08:05
【问题描述】:
我在 JLayeredPane 的一层上的 JPanel 中有一组 JMenuItem,在更高层的 JPanel 中绘制了一个模拟光标。当菜单项重新绘制时,它们会在模拟光标上绘制(不会触发光标层的重新绘制)。有趣的是,如果我用 JButtons 或 JLabels 代替菜单项,则每次重新绘制菜单项时都会正确绘制光标。
如何确保重新绘制菜单项会导致较高层的受影响区域也重新绘制,而不直接在分层窗格上调用 repaint()? 我已经描述的情况与现实有些简化:菜单项可能深深嵌套在分层窗格的子项中,它们根本不应该知道分层窗格。
这是一个伪代码的 sn-p,说明了我所描述的内容:
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);
}
【问题讨论】:
-
好的,但请说明问题是什么。 :) 加上代码将有助于了解您的意思。
标签: java swing jlayeredpane jmenuitem