java.lang.IllegalArgumentException:无法添加到layout:约束必须是字符串

Jha*_*Jha 3 java swing exception cardlayout

CardLayout Manager在我的代码中遇到了困难.我无法弄清楚为什么我会得到这个例外.我在CardLayout.show()方法中传递一个字符串但仍然得到此错误.请帮忙.这是我的主要课程.

@SuppressWarnings("serial")
public class Main extends JFrame implements ActionListener {

final static String mainMenuPanel = "Main Menu";
final static String creditsPanel = "Credits";
final static String introPanel = "Introduction";

private CardLayout cardLayout = new CardLayout();
private JPanel cards = new JPanel(cardLayout);


public Main(){
    //Create and set up the window.
    super();
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLayout(new CardLayout());   
    //this.pack();
    this.setVisible(true);
    this.setSize(new Dimension(800,600));
    this.setLocationRelativeTo(null);
    this.setTitle("Wise Frog Productions.");
    cards.add(new IntroGamePanel(),introPanel);
    cards.add(new MainMenu(),mainMenuPanel);
    this.add(cards);
    swapView(mainMenuPanel);

}
public void swapView(String s){
    cardLayout.show(cards,s);
}
public void actionPerformed(ActionEvent event){

}

public static void main(String[] args){
    javax.swing.SwingUtilities.invokeLater(new Runnable(){
        public void run(){
            new Main();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这是我在外面上课,我正在交换卡片.

public class IntroGamePanel extends JPanel implements MouseInputListener{
private Main main;
ImageIcon beginButtonIcon1 = new ImageIcon(IntroGamePanel.class.getResource("begin_0.gif"));
ImageIcon beginButtonIcon2 = new ImageIcon(IntroGamePanel.class.getResource("begin_1.gif"));
JButton beginButton = new JButton("", beginButtonIcon1);

public IntroGamePanel(){
    super();
    this.setOpaque(true);
    this.add(beginButton);
    this.setPreferredSize(new Dimension(800,600));
    beginButton.setPreferredSize(new Dimension(200,36));
    beginButton.setLocation(240,40);
    beginButton.addMouseMotionListener(this);
    beginButton.addMouseListener(this);
    beginButton.setEnabled(true);
}

@Override
//This will take us to the main menu screen.
public void mouseClicked(MouseEvent e) {    
    if(main != null){
        main.swapView(Main.mainMenuPanel);
    }

}

@Override
public void mouseEntered(MouseEvent e) {
    beginButton.setIcon(beginButtonIcon2);      
}

@Override
public void mouseExited(MouseEvent e) {
    beginButton.setIcon(beginButtonIcon1);
}

@Override
public void mousePressed(MouseEvent e) {
    //not needed
}

@Override
public void mouseReleased(MouseEvent e) {
    //not needed
}

@Override
public void mouseDragged(MouseEvent e) {
    //not needed
}

@Override
public void mouseMoved(MouseEvent e) {
    //not needed
}
public void getMain(Main main){
    this.main = main;
}
}
Run Code Online (Sandbox Code Playgroud)

实际上,我迫切需要一些帮助.:(

How*_*ard 6

该错误来自该行

this.add(cards);
Run Code Online (Sandbox Code Playgroud)

由于您将此布局更改为a CardLayout,因此必须将字符串指定为第二个参数.

你确定要Main一个CardLayout吗?您的面板cards已包含此类布局.