Попытка перекрыть два 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");
}
}
});