Попытка перекрыть два JPanels одинакового размера в JLayeredPane

Я пытаюсь перекрывать два JPanels одинакового размера (здесь "псевдо" и "svg"). JPanel псевдо находится за svg. Предполагается, что JButton перемещает псевдо перед svg. В результате centerPanel.moveToFront(псевдо) не работает. Я что-то пропустил?

        centerPanel = new JLayeredPane();
        centerPanel.setLayout(new BorderLayout());

        centerPanel.add(pseudo, BorderLayout.CENTER, -1);
        centerPanel.add(svg, BorderLayout.CENTER, 0);

        view3D = new JButton("View 3D");

        view3D.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                centerPanel.moveToFront(pseudo);
            }
        });

2 ответа

Решение

JButton должен перемещать псевдо перед svg

Тогда вы должны использовать CardLayout, CardLayout это менеджер компоновки, который позволяет 2 (или более) компонентам занимать одно и то же пространство, но одновременно виден только один компонент.

Прочитайте раздел учебника Swing о том, как использовать CardLayout для получения дополнительной информации и рабочего примера, чтобы начать работу.

И новый код:

        JPanel cardsPanel = new JPanel(new CardLayout());

        cardsPanel.add(svg, "svgPanel");
        cardsPanel.add(pseudo, "pseudo");

        view3D = new JButton("View 3D");

        view3D.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                    CardLayout cl = (CardLayout)(cardsPanel.getLayout());
                    cl.show(cardsPanel, "pseudo");
                }
            }
        });
Другие вопросы по тегам