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);
}
}
}
再次感谢你。另外,感谢您提供的额外提示-我将实现这些字符串。再次感谢您。另外,感谢您提供的额外提示-我将实现这些字符串。再次感谢您。另外,感谢您提供的额外提示-我将实现这些字符串。再次感谢您。另外,感谢您提供的额外提示-我将实现这些字符串。