如何在不同类的JPanel之间切换?我不想使用卡片布局。
我有两节课 - MainPage
& MenuPage
。例如,我想清除contentPane
(a JPanel
)@ MainPage
并将其替换为内容窗格@ MenuPage
。出于测试目的,我添加了一个@ MenuPage
按钮。
请参阅我的以下尝试 - 它会出错:
java.lang.IllegalArgumentException: adding a window to a container
MainPage
public class MainPage extends JFrame {
private static JPanel contentPane;
private JLabel imgBackground;
private JLabel lblTitle;
private JLabel imgLogo;
private Dimension dim;
//timer
private final static int interval = 40;
private int i;
private Timer t;
//private JButton start;
//private JLabel lblLoading;
private JProgressBar pbar;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainPage frame = new MainPage();
frame.setVisible(true);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}
public MainPage() {
dim = Toolkit.getDefaultToolkit().getScreenSize();
System.out.println(dim);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(null);
contentPane.setBounds(0,0,dim.width,dim.height);
setContentPane(contentPane);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
t = new Timer (interval, new ActionListener(){
public void actionPerformed(ActionEvent e) {
if (i == 20){
t.stop();
//start.setEnabled(true);
//refresh + load next page ???
contentPane.removeAll();
MenuPage loadpanel2 = new MenuPage();
setContentPane(loadpanel2);
revalidate();
repaint();
}
else{
i++;
pbar.setValue(i);
}
}
});
t.start();
MenuPage
public class MenuPage extends JFrame {
private JPanel contentPane;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MenuPage frame = new MenuPage();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public MenuPage() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(null);
setContentPane(contentPane);
JButton btnSadfsafsa = new JButton("sadfsafsa");
btnSadfsafsa.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
btnSadfsafsa.setBounds(10, 52, 89, 23);
btnSadfsafsa.setEnabled(true);
btnSadfsafsa.setVisible(true);
contentPane.add(btnSadfsafsa);
}
}
答案 0 :(得分:2)
java.lang.IllegalArgumentException: adding a window to a container
这非常简单。两个GUI都扩展JFrame
,因此是顶级容器。我们无法将一个顶级容器添加到另一个容器中。
两个GUI都可以扩展JPanel
,而不是扩展框架。然后可以将JPanel
(或多个)添加到JFrame
或main(String[])
方法中实例化的showGUI()
。