java - 面板切换在我的测验应用程序中不起作用。我正在使用卡片布局

标签 java swing layout-manager cardlayout

这是输出图像,当我尝试按 Q2 或 Q3 面板时,面板不会改变 enter image description here

这是 GUI 中面板排列的图像

enter image description here

这是我正在努力解决的代码的一部分。请帮忙。

    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                     

}

最佳答案

您可能只是忘记添加 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);
    }
}

关于java - 面板切换在我的测验应用程序中不起作用。我正在使用卡片布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33551843/

相关文章:

java - 如何动态地将db值放入jlist中?

java - 分类调度作业

java - 填充二维数组时如何生成唯一字符?

java - 程序未返回 RadioButton 的正确结果

java - 在 Swing 的 Tablelayout 中设置单元格的边距/插入

java - Caffeine Cache.asMap View 的行为

java - 如何在 Java 应用程序中打印 JTable 对象

java - 如何在 JPanel、JFrame 中移动 JButtons 和 JLabels 位置

android - GridLayoutManager 自定义

java - Netbeans Java 桌面数据库应用程序,具有从 mysql 连接到用户的登录名