这是CardTesting类,在这里我得到IllegalArgumentException:CardLayout的错误父类。行cl.show(this,“ Panel 2”)抛出IllegalArgumentException:CardLayout的父级错误。请帮忙!:D
import java.awt.*;
import javax.swing.*;
public class CardTesting extends JFrame {
CardLayout cl = new CardLayout();
JPanel panel1, panel2;
public CardTesting() {
super("Card Layout Testing");
setSize(400, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(cl);
panel1 = new JPanel();
panel2 = new JPanel();
panel1.add(new JButton("Button 1"));
panel2.add(new JButton("Button 2"));
add(panel1, "Panel 1");
add(panel2, "Panel 2");
setVisible(true);
}
private void iterate() {
try {
Thread.sleep(1000);
} catch (Exception e) { }
cl.show(this, "Panel 2");
}
public static void main(String[] args) {
CardTesting frame = new CardTesting();
frame.iterate();
}
}
之所以得到a是IllegalArguementException
因为您this
在显示卡片时使用的是指向父卡片的cl.show(this, "Panel 2");
位置this
,JFrame
并且您没有为父卡片的'JFrame'添加任何布局。这始终是将卡片封装在aJPanel
而不是内部的更好的方法JFrame
您必须将两个卡/面板添加到父面板,并将Layout分配为。在cardLayout
这里,我创建了一个cardPanel
as父面板
import java.awt.*;
import javax.swing.*;
public class CardTesting extends JFrame {
CardLayout cl = new CardLayout();
JPanel panel1, panel2;
JPanel cardPanel;
public CardTesting() {
super("Card Layout Testing");
setSize(400, 200);
this.setLayout(cl);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(cl);
panel1 = new JPanel();
panel2 = new JPanel();
cardPanel=new JPanel();
cardPanel.setLayout(cl);
panel1.add(new JButton("Button 1"));
panel2.add(new JButton("Button 2"));
cardPanel.add(panel1, "Panel 1");
cardPanel.add(panel2, "Panel 2");
add(cardPanel);
setVisible(true);
}
private void iterate() {
/* the iterate() method is supposed to show the second card after Thread.sleep(1000), but cl.show(this, "Panel 2") throws an IllegalArgumentException: wrong parent for CardLayout*/
try {
Thread.sleep(1000);
} catch (Exception e) {
}
cl.show(cardPanel, "Panel 2");
}
public static void main(String[] args) {
CardTesting frame = new CardTesting();
frame.iterate();
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句