我有一个 GUI,上面有一堆堆叠在一起的 jPanel。哪个“在顶部”由 jLayeredPane 控制。但是,当悬停在按钮和表单不在顶部时,它们变得可见且可交互。
我怎样才能使面板“实心”,即使底层组件不会“弹出”?
我有一个 GUI,上面有一堆堆叠在一起的 jPanel。哪个“在顶部”由 jLayeredPane 控制。但是,当悬停在按钮和表单不在顶部时,它们变得可见且可交互。
我怎样才能使面板“实心”,即使底层组件不会“弹出”?
我建议您使用 aCardLayout
来完成此任务。
那么什么时候应该
JLayeredPane
使用a呢?
Layered Pane
当您希望不同的图层同时可见时使用。用于CardLayout
替换整个窗格。
自 jdk7 起可用的阻止 mouseEvents 的技术解决方案是 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));