我有一个GUI,其中一堆jPanel堆叠在一起。哪一个“在顶部”由jLayeredPane控制。 但是,当鼠标悬停在不在顶部的按钮和表单上时,它们会变得可见并且可以互动。
如何使面板“稳固”,即底层组件不会“弹出”?
答案 0 :(得分:4)
我建议您使用CardLayout
执行此任务。
答案 1 :(得分:3)
那么什么时候应该使用
JLayeredPane
?
如果希望在同时显示不同的图层,请使用Layered Pane
。使用CardLayout
替换整个窗格。
答案 2 :(得分:3)
阻止mouseEvents的技术解决方案,自jdk7起可用,是一个JLayer(我还在玩它,这就是我偶尔出现的原因: - )
public static class MouseBlockerUI extends LayerUI<JComponent> {
@Override
protected void processMouseEvent(MouseEvent e, JLayer l) {
JLayeredPane layeredPane = (JLayeredPane) l.getParent();
if (layeredPane.getLayer(l) != layeredPane.highestLayer())
e.consume();
}
@Override
public void installUI(JComponent c) {
super.installUI(c);
JLayer jlayer = (JLayer)c;
jlayer.setLayerEventMask(
AWTEvent.MOUSE_EVENT_MASK
);
}
@Override
public void uninstallUI(JComponent c) {
JLayer jlayer = (JLayer)c;
jlayer.setLayerEventMask(0);
super.uninstallUI(c);
}
}
然后将您的面板包装到JLayer中并将JLayer添加到JLayeredPane:
layeredPane.add(new JLayer(myPanel, new MouseBlockerUI(), someLayer));