Java 正在尝试执行CardLayout,但在运行GUI时未显示任何按钮

Java 正在尝试执行CardLayout,但在运行GUI时未显示任何按钮,java,swing,jpanel,cardlayout,Java,Swing,Jpanel,Cardlayout,我想做一个卡片布局。现在我甚至不能在两个屏幕之间切换。我希望第一个屏幕有三个顶部按钮。单击“添加问题”时,我希望第二个屏幕显示出来,一旦我解决了这个问题,我会立即编写代码。现在根本没有显示任何按钮 public class BookQuizGUI extends JFrame implements ActionListener { private JFrame f; private JPanel card; private JPanel home; private

我想做一个卡片布局。现在我甚至不能在两个屏幕之间切换。我希望第一个屏幕有三个顶部按钮。单击“添加问题”时,我希望第二个屏幕显示出来,一旦我解决了这个问题,我会立即编写代码。现在根本没有显示任何按钮

public class BookQuizGUI extends JFrame implements ActionListener
{
    private JFrame f;
    private JPanel card;
    private JPanel home;
    private JPanel contentPane;
    private JPanel pnlButtons;
    private JButton addQs;
    private JButton takeQuiz;
    private JButton quit;
    private CardLayout cardLayout;
    private JPanel addQ;
    private JPanel pnlButtons2;
    private JButton add;
    private JButton writeAll;
    private JButton done;
    private JButton quit2;

    /**
     * 
     */
    public BookQuizGUI()
    {
        //The main screen for when the program starts
        f = new JFrame();
        f.setTitle("Book Quiz");
        f.setSize(800, 400);
        f.setLocation(400, 250);
        f.setDefaultCloseOperation(EXIT_ON_CLOSE);
        contentPane = (JPanel) f.getContentPane();
        card = new JPanel();
        cardLayout = new CardLayout();
        card.setLayout(cardLayout);
        home = new JPanel();
        pnlButtons = new JPanel();
        pnlButtons.setLayout(new GridLayout(1, 3));
        addQs = new JButton("Add Questions");
        takeQuiz = new JButton("Take Quiz");
        quit = new JButton("Quit");
        pnlButtons.add(addQs);
        pnlButtons.add(takeQuiz);
        pnlButtons.add(quit);
        home.add(pnlButtons);
        card.add(home);
        f.add(card);
        cardLayout.show(card, "Home");

        addQ = new JPanel();
        addQ.setLayout(new GridLayout(1, 2));
        pnlButtons2 = new JPanel();
        add = new JButton("Add");
        writeAll = new JButton("Write All");
        done = new JButton("Done");
        quit2 = new JButton("Quit");
        pnlButtons2.add(add);
        pnlButtons2.add(writeAll);
        pnlButtons2.add(done);
        pnlButtons2.add(quit2);
        addQ.add(pnlButtons, BorderLayout.SOUTH);


        addQs.addActionListener(this);
        takeQuiz.addActionListener(this);
        quit.addActionListener(this);

        f.setVisible(true);
        }

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        BookQuizGUI gui = new BookQuizGUI();

    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == quit)
        {
            System.exit(0);
        }
        if(e.getSource() == addQs)
        {

        }
    }

}

非常感谢您的帮助。

您没有使用容器将组件正确添加到CardLayout。根据我知道您有链接的教程,您需要添加带有键字符串的组件。因此:

    card.add(home);
    f.add(card);
    cardLayout.show(card, "Home");
应该是:

    card.add(home, "Home");
    f.add(card);
    cardLayout.show(card, "Home");
就我自己而言,我更喜欢使用字符串常量,而不是字符串文字,以减少错误


您还将pnlButtons添加到多个容器中——不要这样做,因为这会使gui出错。您可以将组件添加到一个且只能添加到一个容器中

所以改变

addQ.add(pnlButtons, BorderLayout.SOUTH);


例如:

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

public class BookQuizGUI extends JFrame implements ActionListener {
   private static final String HOME = "home";
   private static final String ADD_Q = "add q";
   private JFrame f;
   private JPanel card;
   private JPanel home;
   private JPanel contentPane;
   private JPanel pnlButtons;
   private JButton addQs;
   private JButton takeQuiz;
   private JButton quit;
   private CardLayout cardLayout;
   private JPanel addQ;
   private JPanel pnlButtons2;
   private JButton add;
   private JButton writeAll;
   private JButton done;
   private JButton quit2;

   public BookQuizGUI() {
      f = new JFrame();
      f.setTitle("Book Quiz");
      // f.setSize(800, 400);
      f.setLocation(400, 250);
      f.setDefaultCloseOperation(EXIT_ON_CLOSE);
      contentPane = (JPanel) f.getContentPane();
      home = new JPanel();
      pnlButtons = new JPanel();
      pnlButtons.setLayout(new GridLayout(1, 3));
      addQs = new JButton("Add Questions");
      takeQuiz = new JButton("Take Quiz");
      quit = new JButton("Quit");
      pnlButtons.add(addQs);
      pnlButtons.add(takeQuiz);
      pnlButtons.add(quit);
      home.add(pnlButtons);

      addQ = new JPanel();
      addQ.setLayout(new GridLayout(1, 2));
      pnlButtons2 = new JPanel();
      add = new JButton("Add");
      writeAll = new JButton("Write All");
      done = new JButton("Done");
      quit2 = new JButton("Quit");
      pnlButtons2.add(add);
      pnlButtons2.add(writeAll);
      pnlButtons2.add(done);
      pnlButtons2.add(quit2);
      addQ.add(pnlButtons2, BorderLayout.SOUTH);

      addQs.addActionListener(this);
      takeQuiz.addActionListener(this);
      quit.addActionListener(this);


      card = new JPanel();
      cardLayout = new CardLayout();
      card.setLayout(cardLayout);
      card.add(home, HOME);
      card.add(addQ, ADD_Q);     
      cardLayout.show(card, HOME);
      f.add(card);
      f.pack();
      f.setVisible(true);
   }

   public static void main(String[] args) {
      new BookQuizGUI();
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      if (e.getSource() == quit) {
         System.exit(0);
      }
      if (e.getSource() == addQs) {
         cardLayout.show(card, ADD_Q);
      }
   }

}

您没有使用容器将组件正确添加到CardLayout。根据我知道您有链接的教程,您需要添加带有键字符串的组件。因此:

    card.add(home);
    f.add(card);
    cardLayout.show(card, "Home");
应该是:

    card.add(home, "Home");
    f.add(card);
    cardLayout.show(card, "Home");
就我自己而言,我更喜欢使用字符串常量,而不是字符串文字,以减少错误


您还将pnlButtons添加到多个容器中——不要这样做,因为这会使gui出错。您可以将组件添加到一个且只能添加到一个容器中

所以改变

addQ.add(pnlButtons, BorderLayout.SOUTH);


例如:

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

public class BookQuizGUI extends JFrame implements ActionListener {
   private static final String HOME = "home";
   private static final String ADD_Q = "add q";
   private JFrame f;
   private JPanel card;
   private JPanel home;
   private JPanel contentPane;
   private JPanel pnlButtons;
   private JButton addQs;
   private JButton takeQuiz;
   private JButton quit;
   private CardLayout cardLayout;
   private JPanel addQ;
   private JPanel pnlButtons2;
   private JButton add;
   private JButton writeAll;
   private JButton done;
   private JButton quit2;

   public BookQuizGUI() {
      f = new JFrame();
      f.setTitle("Book Quiz");
      // f.setSize(800, 400);
      f.setLocation(400, 250);
      f.setDefaultCloseOperation(EXIT_ON_CLOSE);
      contentPane = (JPanel) f.getContentPane();
      home = new JPanel();
      pnlButtons = new JPanel();
      pnlButtons.setLayout(new GridLayout(1, 3));
      addQs = new JButton("Add Questions");
      takeQuiz = new JButton("Take Quiz");
      quit = new JButton("Quit");
      pnlButtons.add(addQs);
      pnlButtons.add(takeQuiz);
      pnlButtons.add(quit);
      home.add(pnlButtons);

      addQ = new JPanel();
      addQ.setLayout(new GridLayout(1, 2));
      pnlButtons2 = new JPanel();
      add = new JButton("Add");
      writeAll = new JButton("Write All");
      done = new JButton("Done");
      quit2 = new JButton("Quit");
      pnlButtons2.add(add);
      pnlButtons2.add(writeAll);
      pnlButtons2.add(done);
      pnlButtons2.add(quit2);
      addQ.add(pnlButtons2, BorderLayout.SOUTH);

      addQs.addActionListener(this);
      takeQuiz.addActionListener(this);
      quit.addActionListener(this);


      card = new JPanel();
      cardLayout = new CardLayout();
      card.setLayout(cardLayout);
      card.add(home, HOME);
      card.add(addQ, ADD_Q);     
      cardLayout.show(card, HOME);
      f.add(card);
      f.pack();
      f.setVisible(true);
   }

   public static void main(String[] args) {
      new BookQuizGUI();
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      if (e.getSource() == quit) {
         System.exit(0);
      }
      if (e.getSource() == addQs) {
         cardLayout.show(card, ADD_Q);
      }
   }

}

您没有使用容器将组件正确添加到CardLayout。根据我知道您有链接的教程,您需要添加带有键字符串的组件。因此:

    card.add(home);
    f.add(card);
    cardLayout.show(card, "Home");
应该是:

    card.add(home, "Home");
    f.add(card);
    cardLayout.show(card, "Home");
就我自己而言,我更喜欢使用字符串常量,而不是字符串文字,以减少错误


您还将pnlButtons添加到多个容器中——不要这样做,因为这会使gui出错。您可以将组件添加到一个且只能添加到一个容器中

所以改变

addQ.add(pnlButtons, BorderLayout.SOUTH);


例如:

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

public class BookQuizGUI extends JFrame implements ActionListener {
   private static final String HOME = "home";
   private static final String ADD_Q = "add q";
   private JFrame f;
   private JPanel card;
   private JPanel home;
   private JPanel contentPane;
   private JPanel pnlButtons;
   private JButton addQs;
   private JButton takeQuiz;
   private JButton quit;
   private CardLayout cardLayout;
   private JPanel addQ;
   private JPanel pnlButtons2;
   private JButton add;
   private JButton writeAll;
   private JButton done;
   private JButton quit2;

   public BookQuizGUI() {
      f = new JFrame();
      f.setTitle("Book Quiz");
      // f.setSize(800, 400);
      f.setLocation(400, 250);
      f.setDefaultCloseOperation(EXIT_ON_CLOSE);
      contentPane = (JPanel) f.getContentPane();
      home = new JPanel();
      pnlButtons = new JPanel();
      pnlButtons.setLayout(new GridLayout(1, 3));
      addQs = new JButton("Add Questions");
      takeQuiz = new JButton("Take Quiz");
      quit = new JButton("Quit");
      pnlButtons.add(addQs);
      pnlButtons.add(takeQuiz);
      pnlButtons.add(quit);
      home.add(pnlButtons);

      addQ = new JPanel();
      addQ.setLayout(new GridLayout(1, 2));
      pnlButtons2 = new JPanel();
      add = new JButton("Add");
      writeAll = new JButton("Write All");
      done = new JButton("Done");
      quit2 = new JButton("Quit");
      pnlButtons2.add(add);
      pnlButtons2.add(writeAll);
      pnlButtons2.add(done);
      pnlButtons2.add(quit2);
      addQ.add(pnlButtons2, BorderLayout.SOUTH);

      addQs.addActionListener(this);
      takeQuiz.addActionListener(this);
      quit.addActionListener(this);


      card = new JPanel();
      cardLayout = new CardLayout();
      card.setLayout(cardLayout);
      card.add(home, HOME);
      card.add(addQ, ADD_Q);     
      cardLayout.show(card, HOME);
      f.add(card);
      f.pack();
      f.setVisible(true);
   }

   public static void main(String[] args) {
      new BookQuizGUI();
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      if (e.getSource() == quit) {
         System.exit(0);
      }
      if (e.getSource() == addQs) {
         cardLayout.show(card, ADD_Q);
      }
   }

}

您没有使用容器将组件正确添加到CardLayout。根据我知道您有链接的教程,您需要添加带有键字符串的组件。因此:

    card.add(home);
    f.add(card);
    cardLayout.show(card, "Home");
应该是:

    card.add(home, "Home");
    f.add(card);
    cardLayout.show(card, "Home");
就我自己而言,我更喜欢使用字符串常量,而不是字符串文字,以减少错误


您还将pnlButtons添加到多个容器中——不要这样做,因为这会使gui出错。您可以将组件添加到一个且只能添加到一个容器中

所以改变

addQ.add(pnlButtons, BorderLayout.SOUTH);


例如:

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

public class BookQuizGUI extends JFrame implements ActionListener {
   private static final String HOME = "home";
   private static final String ADD_Q = "add q";
   private JFrame f;
   private JPanel card;
   private JPanel home;
   private JPanel contentPane;
   private JPanel pnlButtons;
   private JButton addQs;
   private JButton takeQuiz;
   private JButton quit;
   private CardLayout cardLayout;
   private JPanel addQ;
   private JPanel pnlButtons2;
   private JButton add;
   private JButton writeAll;
   private JButton done;
   private JButton quit2;

   public BookQuizGUI() {
      f = new JFrame();
      f.setTitle("Book Quiz");
      // f.setSize(800, 400);
      f.setLocation(400, 250);
      f.setDefaultCloseOperation(EXIT_ON_CLOSE);
      contentPane = (JPanel) f.getContentPane();
      home = new JPanel();
      pnlButtons = new JPanel();
      pnlButtons.setLayout(new GridLayout(1, 3));
      addQs = new JButton("Add Questions");
      takeQuiz = new JButton("Take Quiz");
      quit = new JButton("Quit");
      pnlButtons.add(addQs);
      pnlButtons.add(takeQuiz);
      pnlButtons.add(quit);
      home.add(pnlButtons);

      addQ = new JPanel();
      addQ.setLayout(new GridLayout(1, 2));
      pnlButtons2 = new JPanel();
      add = new JButton("Add");
      writeAll = new JButton("Write All");
      done = new JButton("Done");
      quit2 = new JButton("Quit");
      pnlButtons2.add(add);
      pnlButtons2.add(writeAll);
      pnlButtons2.add(done);
      pnlButtons2.add(quit2);
      addQ.add(pnlButtons2, BorderLayout.SOUTH);

      addQs.addActionListener(this);
      takeQuiz.addActionListener(this);
      quit.addActionListener(this);


      card = new JPanel();
      cardLayout = new CardLayout();
      card.setLayout(cardLayout);
      card.add(home, HOME);
      card.add(addQ, ADD_Q);     
      cardLayout.show(card, HOME);
      f.add(card);
      f.pack();
      f.setVisible(true);
   }

   public static void main(String[] args) {
      new BookQuizGUI();
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      if (e.getSource() == quit) {
         System.exit(0);
      }
      if (e.getSource() == addQs) {
         cardLayout.show(card, ADD_Q);
      }
   }

}

再次感谢你。另外,感谢您提供的额外提示-我将实现这些字符串。再次感谢您。另外,感谢您提供的额外提示-我将实现这些字符串。再次感谢您。另外,感谢您提供的额外提示-我将实现这些字符串。再次感谢您。另外,感谢您提供的额外提示-我将实现这些字符串。