Java 切换面板在我的测验应用程序中不起作用。我正在使用cardlayout

Java 切换面板在我的测验应用程序中不起作用。我正在使用cardlayout,java,swing,layout-manager,cardlayout,Java,Swing,Layout Manager,Cardlayout,这是我试着按Q2或Q3时的输出图像,面板没有变化 这是gui中面板排列的图像 这是我代码的一部分,我在其中挣扎。请帮忙 public NewJFrame() { initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code.

这是我试着按Q2或Q3时的输出图像,面板没有变化

这是gui中面板排列的图像

这是我代码的一部分,我在其中挣扎。请帮忙

    public NewJFrame() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        upperpanel = new javax.swing.JPanel();
        qu1 = new javax.swing.JButton();
        qu2 = new javax.swing.JButton();
        qu3 = new javax.swing.JButton();
        qu4 = new javax.swing.JButton();
        qu5 = new javax.swing.JButton();
        lowerpanel = new javax.swing.JPanel();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        jButton1 = new javax.swing.JButton();
        parentpanel = new javax.swing.JPanel();
        q1 = new javax.swing.JPanel();
        question1 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jTextField3 = new javax.swing.JTextField();
        jTextField4 = new javax.swing.JTextField();
        jTextField5 = new javax.swing.JTextField();
        jTextField6 = new javax.swing.JTextField();
        q2 = new javax.swing.JPanel();
        question2 = new javax.swing.JLabel();
        jTextField7 = new javax.swing.JTextField();
        jTextField8 = new javax.swing.JTextField();
        jTextField9 = new javax.swing.JTextField();
        jTextField10 = new javax.swing.JTextField();
        jTextField11 = new javax.swing.JTextField();
        jTextField12 = new javax.swing.JTextField();
        q3 = new javax.swing.JPanel();
        question3 = new javax.swing.JLabel();
        jTextField13 = new javax.swing.JTextField();
        jTextField14 = new javax.swing.JTextField();
        jTextField15 = new javax.swing.JTextField();
        jTextField16 = new javax.swing.JTextField();
        jTextField17 = new javax.swing.JTextField();
        jTextField18 = new javax.swing.JTextField();
        q4 = new javax.swing.JPanel();
        question4 = new javax.swing.JLabel();
        jTextField19 = new javax.swing.JTextField();
        jTextField20 = new javax.swing.JTextField();
        jTextField21 = new javax.swing.JTextField();
        jTextField22 = new javax.swing.JTextField();
        jTextField23 = new javax.swing.JTextField();
        jTextField24 = new javax.swing.JTextField();
        q5 = new javax.swing.JPanel();
        question5 = new javax.swing.JLabel();
        jTextField25 = new javax.swing.JTextField();
        jTextField26 = new javax.swing.JTextField();
        jTextField27 = new javax.swing.JTextField();
        jTextField28 = new javax.swing.JTextField();
        jTextField29 = new javax.swing.JTextField();
        jTextField30 = new javax.swing.JTextField();





    private void qu1ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        // TODO add your handling code here:
        CardLayout card;
        card = (CardLayout)parentpanel.getLayout();
        card.show(parentpanel, "q1");
    }                                   

    private void qu2ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        // TODO add your handling code here:
        CardLayout card;
        card = (CardLayout)parentpanel.getLayout();
        card.show(parentpanel, "q2");
    }                                   

    private void qu3ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        // TODO add your handling code here:
        CardLayout card;
        card = (CardLayout)parentpanel.getLayout();
        card.show(parentpanel, "q3");
    }                                   

    private void qu4ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        // TODO add your handling code here:
        CardLayout card;
        card = (CardLayout)parentpanel.getLayout();
        card.show(parentpanel, "q4");
    }                                   

    private void qu5ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        // TODO add your handling code here:
        CardLayout card;
        card = (CardLayout)parentpanel.getLayout();
        card.show(parentpanel, "q5");
    }                                   


    }

    // Variables declaration - do not modify                     

}
public NewJFrame(){
初始化组件();
}
/**
*从构造函数中调用此方法来初始化表单。
*警告:请勿修改此代码。此方法的内容始终是
*由表单编辑器重新生成。
*/
@抑制警告(“未选中”)
//                           
私有组件(){
upperpanel=newjavax.swing.JPanel();
qu1=newjavax.swing.JButton();
qu2=newjavax.swing.JButton();
qu3=newjavax.swing.JButton();
qu4=newjavax.swing.JButton();
qu5=newjavax.swing.JButton();
lowerpanel=newjavax.swing.JPanel();
jButton2=newjavax.swing.JButton();
jButton3=newjavax.swing.JButton();
jButton1=newjavax.swing.JButton();
parentpanel=newjavax.swing.JPanel();
q1=newjavax.swing.JPanel();
问题1=newjavax.swing.JLabel();
jTextField1=newjavax.swing.JTextField();
jTextField2=newjavax.swing.JTextField();
jTextField3=newjavax.swing.JTextField();
jTextField4=newjavax.swing.JTextField();
jTextField5=newjavax.swing.JTextField();
jTextField6=newjavax.swing.JTextField();
q2=newjavax.swing.JPanel();
question2=newjavax.swing.JLabel();
jTextField7=newjavax.swing.JTextField();
jTextField8=newjavax.swing.JTextField();
jTextField9=newjavax.swing.JTextField();
jTextField10=newjavax.swing.JTextField();
jTextField11=newjavax.swing.JTextField();
jTextField12=newjavax.swing.JTextField();
q3=newjavax.swing.JPanel();
question3=newjavax.swing.JLabel();
jTextField13=newjavax.swing.JTextField();
jTextField14=newjavax.swing.JTextField();
jTextField15=newjavax.swing.JTextField();
jTextField16=newjavax.swing.JTextField();
jTextField17=newjavax.swing.JTextField();
jTextField18=newjavax.swing.JTextField();
q4=newjavax.swing.JPanel();
question4=newjavax.swing.JLabel();
jTextField19=newjavax.swing.JTextField();
jTextField20=newjavax.swing.JTextField();
jTextField21=newjavax.swing.JTextField();
jTextField22=newjavax.swing.JTextField();
jTextField23=newjavax.swing.JTextField();
jTextField24=newjavax.swing.JTextField();
q5=newjavax.swing.JPanel();
question5=newjavax.swing.JLabel();
jTextField25=newjavax.swing.JTextField();
jTextField26=newjavax.swing.JTextField();
jTextField27=newjavax.swing.JTextField();
jTextField28=newjavax.swing.JTextField();
jTextField29=newjavax.swing.JTextField();
jTextField30=newjavax.swing.JTextField();
私有void qu1ActionPerformed(java.awt.event.ActionEvent evt){
//TODO在此处添加您的处理代码:
卡片布局卡;
card=(CardLayout)parentpanel.getLayout();
卡片显示(父面板,“q1”);
}                                   
私有void qu2ActionPerformed(java.awt.event.ActionEvent evt){
//TODO在此处添加您的处理代码:
卡片布局卡;
card=(CardLayout)parentpanel.getLayout();
卡片显示(父面板,“q2”);
}                                   
私有void qu3ActionPerformed(java.awt.event.ActionEvent evt){
//TODO在此处添加您的处理代码:
卡片布局卡;
card=(CardLayout)parentpanel.getLayout();
卡片显示(父面板,“q3”);
}                                   
私有void qu4ActionPerformed(java.awt.event.ActionEvent evt){
//TODO在此处添加您的处理代码:
卡片布局卡;
card=(CardLayout)parentpanel.getLayout();
卡片展示(父面板,“q4”);
}                                   
私有void qu5ActionPerformed(java.awt.event.ActionEvent evt){
//TODO在此处添加您的处理代码:
卡片布局卡;
card=(CardLayout)parentpanel.getLayout();
卡片显示(家长面板,“q5”);
}                                   
}
//变量声明-不修改
}

您可能只是忘记添加
ActionListener

        qu1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
                qu1ActionPerformed(ev);
            }
        });
但是,如果我给你一个关于卡片布局工作原理的示例(然后调试你提交的部分代码),我会更快,我会尝试遵循你的代码风格(这是一个示例,而不是你的解决方案,所以我将其保留为至少2张卡片)

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class CardLayoutTest extends JFrame{

   private static final long serialVersionUID = 1L;

   final static String CARD_1 = "Card1";
   final static String CARD_2 = "Card2";

private JPanel cardPanel;

    public CardLayoutTest(){
        super("CardLayoutTest");
        initComponents();
    }

    private void initComponents() {
        this.getContentPane().setLayout(new BorderLayout());

        JButton btnCard1 = new JButton("Card1");
        btnCard1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
                btnCard1_ActionPerformed(ev);
            }
        });
        JButton btnCard2 = new JButton("Card2");
        btnCard2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
                btnCard2_ActionPerformed(ev);
            }
        });

        cardPanel = new JPanel(new CardLayout());
        JPanel card1 = new JPanel();
        card1.add(new JLabel("Card1"));

        JPanel card2 = new JPanel();
        card2.add(new JLabel("Card2"));

        cardPanel.add(card1,CARD_1);
        cardPanel.add(card2,CARD_2);

        this.getContentPane().add(btnCard1,BorderLayout.NORTH);
        this.getContentPane().add(btnCard2,BorderLayout.SOUTH);
        this.getContentPane().add(cardPanel,BorderLayout.CENTER);
    }

    private void btnCard1_ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        CardLayout card = (CardLayout)cardPanel.getLayout();
        card.show(cardPanel, CARD_1);
    }                                   

    private void btnCard2_ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        CardLayout card = (CardLayout)cardPanel.getLayout();
        card.show(cardPanel, CARD_2);
    }                                   

    public static void main(String[] args) {
        CardLayoutTest clt = new CardLayoutTest();
        clt.pack();
        clt.setLocationRelativeTo(null);
        clt.setVisible(true);
    }
}

您可能只是忘记添加
ActionListener

        qu1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
                qu1ActionPerformed(ev);
            }
        });
但是,如果我给你一个关于卡片布局工作原理的示例(然后调试你提交的部分代码),我会更快,我会尝试遵循你的代码风格(这是一个示例,而不是你的解决方案,所以我将其保留为至少2张卡片)

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class CardLayoutTest extends JFrame{

   private static final long serialVersionUID = 1L;

   final static String CARD_1 = "Card1";
   final static String CARD_2 = "Card2";

private JPanel cardPanel;

    public CardLayoutTest(){
        super("CardLayoutTest");
        initComponents();
    }

    private void initComponents() {
        this.getContentPane().setLayout(new BorderLayout());

        JButton btnCard1 = new JButton("Card1");
        btnCard1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
                btnCard1_ActionPerformed(ev);
            }
        });
        JButton btnCard2 = new JButton("Card2");
        btnCard2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
                btnCard2_ActionPerformed(ev);
            }
        });

        cardPanel = new JPanel(new CardLayout());
        JPanel card1 = new JPanel();
        card1.add(new JLabel("Card1"));

        JPanel card2 = new JPanel();
        card2.add(new JLabel("Card2"));

        cardPanel.add(card1,CARD_1);
        cardPanel.add(card2,CARD_2);

        this.getContentPane().add(btnCard1,BorderLayout.NORTH);
        this.getContentPane().add(btnCard2,BorderLayout.SOUTH);
        this.getContentPane().add(cardPanel,BorderLayout.CENTER);
    }

    private void btnCard1_ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        CardLayout card = (CardLayout)cardPanel.getLayout();
        card.show(cardPanel, CARD_1);
    }                                   

    private void btnCard2_ActionPerformed(java.awt.event.ActionEvent evt) {                                    
        CardLayout card = (CardLayout)cardPanel.getLayout();
        card.show(cardPanel, CARD_2);
    }                                   

    public static void main(String[] args) {
        CardLayoutTest clt = new CardLayoutTest();
        clt.pack();
        clt.setLocationRelativeTo(null);
        clt.setVisible(true);
    }
}

这是你的全部代码吗?我不是在你为按钮设置ActionListener代码的地方。要更快地获得更好的帮助,请发布or。这是你的全部代码吗?我不是在你为按钮设置ActionListener代码的地方。要更快地获得更好的帮助,请发布or。