wrong parent for CardLayout (含代码段)怎么解决?

package BankUserUI;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ClientUI123 {
    public void CreateClientUI() {
        //create a main frame
        JFrame f = new JFrame("Welcome to the bank.");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setResizable(false);
        f.setSize(500,300);
        f.setLocationRelativeTo(null);

        JPanel mainPanel = new JPanel();
        CardLayout cards = new CardLayout();
        mainPanel.setLayout(cards);
        f.add(mainPanel);

        //interface 1
        //login interface
        JPanel login = new JPanel(null);
        mainPanel.add(login, "login");
        cards.addLayoutComponent(login, "login");

        JLabel name = new JLabel("name:");
        JTextField nameType = new JTextField(15);
        JButton loginButton = new JButton("LOGIN");
        JButton enrollButton = new JButton("ENROLL");
        JButton quit = new JButton("QUIT");

        login.add(name);
        login.add(nameType);
        login.add(loginButton);
        login.add(enrollButton);
        login.add(quit);
        name.setBounds(90, 100, 100, 20);
        nameType.setBounds(130, 100, 100, 20);

        login.add(loginButton);
        login.add(enrollButton);
        login.add(quit);
        loginButton.setBounds(300, 60, 100, 20);
        enrollButton.setBounds(300, 120, 100, 20);
        quit.setBounds(300,180, 100, 20);

        //interface 2
        //service check interface
        JPanel services = new JPanel(null);
        mainPanel.add(services, "services");
        cards.addLayoutComponent(services, "services");

        JButton delete = new JButton("Delete a specified account.");
        JButton display = new JButton("Display all my accounts.");
        JButton modify = new JButton("Modify a specific account.");

        services.add(delete);
        services.add(display);
        services.add(modify);
        delete.setBounds(100, 60, 300, 30);
        display.setBounds(100, 120, 300, 30);
        modify.setBounds(100, 180, 300, 30);

        class Actions implements ActionListener {
            @Override
            public void actionPerformed(ActionEvent e) {
                if(e.getActionCommand().equals("LOGIN")) {
                    //cards.next(services);
                    cards.show(services, "services");
                }
            }
        }

        Actions actions = new Actions();

        loginButton.addActionListener(actions);
        enrollButton.addActionListener(actions);
        quit.addActionListener(actions);

        delete.addActionListener(actions);
        display.addActionListener(actions);
        modify.addActionListener(actions);

        f.setVisible(true);
    }

    public static void main(String[] args) {
        //create a UI
        new ClientUI123().CreateClientUI();
    }
}

运行界面

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for CardLayout
	at java.desktop/java.awt.CardLayout.checkLayout(CardLayout.java:404)
	at java.desktop/java.awt.CardLayout.next(CardLayout.java:441)
	at BankUserUI.ClientUI123$1Actions.actionPerformed(ClientUI123.java:70)<4 internal calls>
    at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)<30 internal calls>

运行界面的详细信息(如果有用的话)

D:\Java\bin\java.exe "-javaagent:D:\IDEA\IntelliJ IDEA Educational Edition 2020.3.4\lib\idea_rt.jar=6024:D:\IDEA\IntelliJ IDEA Educational Edition 2020.3.4\bin" -Dfile.encoding=UTF-8 -classpath D:\javacode\BankUserUI\out\production\BankUserUI BankUserUI.ClientUI123
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for CardLayout
	at java.desktop/java.awt.CardLayout.checkLayout(CardLayout.java:404)
	at java.desktop/java.awt.CardLayout.next(CardLayout.java:441)
	at BankUserUI.ClientUI123$1Actions.actionPerformed(ClientUI123.java:70)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6614)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
	at java.desktop/java.awt.Component.processEvent(Component.java:6379)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4990)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4919)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4548)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4489)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2769)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Process finished with exit code 0

 

  cards.show(services, "services");

这句话有问题

主要是你想解决什么问题。新建一个窗口吗

还是做什么处理,你的源代码可能有问题。

讲代码改成

  cards.show(mainPanel, "services");

就不会报错

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y