Ниже код работает нормально. Вы создаете Panels
, InternalFrames
или любой другой контейнер и просто добавляете его на многоуровневую панель. Я думаю, что этот подход сделает всю работу.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JComboBox;
public class Main extends JFrame {
private JPanel contentPane;
private JButton toPanel2Button;
private JLayeredPane layeredPane;
private JPanel panel1;
private JPanel panel2;
private JLabel label2;
private JButton toPanel1Button;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Main() {
initComponents();
createEvents();
}
private void initComponents() {
//init frame
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 552, 410);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
//create a layered pane
layeredPane = new JLayeredPane();
layeredPane.setBounds(0, 0, 536, 371);
contentPane.add(layeredPane);
//create the panel as you like it
panel1 = new JPanel();
panel1.setBounds(0, 0, 536, 371);
panel1.setLayout(null);
//you can add everything you like
toPanel2Button = new JButton("Change Panel");
toPanel2Button.setBounds(142, 269, 216, 58);
panel1.add(toPanel2Button);
JLabel label1 = new JLabel("This is panel 1");
label1.setBounds(142, 68, 216, 51);
panel1.add(label1);
//add it to the layered pane
layeredPane.add(panel1);
//create another panel
panel2 = new JPanel();
panel2.setBounds(0, 0, 536, 371);
panel2.setLayout(null);
//add the components you like
label2 = new JLabel("This is another label");
label2.setBounds(155, 73, 193, 42);
panel2.add(label2);
toPanel1Button = new JButton("GO BACK!");
toPanel1Button.setBounds(160, 261, 89, 23);
panel2.add(toPanel1Button);
//add it to the layered pane
layeredPane.add(panel2);
}
private void createEvents() {
toPanel2Button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//remove all layeres
layeredPane.removeAll();
//add the one you like
layeredPane.add(panel2);
//must revalidate to show it.. see layeredPane.add method javadoc
layeredPane.repaint();
//and a revalidate for good measure
layeredPane.revalidate();
}
});
toPanel1Button.addActionListener(new ActionListener() {
//same this for another button
public void actionPerformed(ActionEvent e) {
layeredPane.removeAll();
layeredPane.add(panel1);
layeredPane.repaint();
layeredPane.revalidate();
}
});
}
}