使jLayeredPanes“坚实”

时间:2011-09-07 08:28:31

标签: java swing jlayeredpane

我有一个GUI,其中一堆jPanel堆叠在一起。哪一个“在顶部”由jLayeredPane控制。 但是,当鼠标悬停在不在顶部的按钮和表单上时,它们会变得可见并且可以互动。

如何使面板“稳固”,即底层组件不会“弹出”?

3 个答案:

答案 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));