Saketan Patil
Saketan Patil

Reputation: 31

Switching of panels is not working in my quiz application. I am using cardlayout

This is output image When I try to press Q2 Or Q3 panel doesn't changes enter image description here

This is image of arrangement of panels in gui

enter image description here

This is part of my code in which I am struggling . Please help.

    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                     

}

Upvotes: 0

Views: 130

Answers (1)

Petter Friberg
Petter Friberg

Reputation: 21710

You probably just forgot to add the ActionListener,

        qu1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
                qu1ActionPerformed(ev);
            }
        });

but its quicker that I pass you an example of how card layout works (then debugging the parts of code you have submitted), I have tried to follow your code style (this is an example not your solution,so I have keept it to a minimum just 2 cards.

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);
    }
}

Upvotes: 4

Related Questions