一旦向
start面板中添加了一些其他组件,我就不会遇到问题(与您的代码无关)。
但是,您会遇到问题,因为您已将按钮添加到面板中,该按钮已显示在中
CardLayout。
更好的解决方案是将按钮放在主屏幕的底部,并将其与卡分开。
您将需要维护某种计数器或对当前页面的引用,因为
CardLayout它没有提供任何方式来获取对当前卡的引用。这将允许您适当地启用/禁用下一个/上一个按钮…
更新为可运行示例…
import java.awt.BorderLayout;import java.awt.CardLayout;import java.awt.EventQueue;import java.awt.FlowLayout;import java.awt.GridBagConstraints;import java.awt.GridBagLayout;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;import javax.swing.JTextField;import javax.swing.UIManager;import javax.swing.UnsupportedLookAndFeelException;public class MakeAQuiz { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } new MakeAQuiz(); } }); } private JPanel start, base, fields, buttonz, question; private String[] labels = {"Enter your question: ", "Answer 1: ", "Answer 2: ", "Answer 3: ", "Answer 4: "}; private JButton[] buttons = {new JButton("<<Go back"), new JButton("I'm done"), new JButton("Next>>")}; private Jframe makeframe; public MakeAQuiz() { start = new JPanel(new CardLayout()); start.add(makePanel(), "1"); makeframe = new Jframe(); makeframe.add(start); buttonz = new JPanel(new FlowLayout()); final CardLayout layout = (CardLayout) start.getLayout(); buttons[1].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { buttons[0].setEnabled(false); buttons[2].setEnabled(false); } }); buttons[2].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { int count = start.getComponentCount(); start.add(new JLabel(Integer.toString(count), JLabel.CENTER), Integer.toString(count)); layout.next(start); } }); buttons[0].addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { layout.previous(start); } }); buttonz.add(buttons[0]); buttonz.add(buttons[1]); buttonz.add(buttons[2]); makeframe.add(buttonz, BorderLayout.SOUTH); makeframe.pack(); makeframe.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); makeframe.setVisible(true); } public Jframe getJframe() { return makeframe; } public JPanel makePanel() { question = new JPanel(new FlowLayout()); fields = new JPanel(new GridBagLayout()); base = new JPanel(new BorderLayout()); GridBagConstraints c = new GridBagConstraints(); c.weighty = 0.5; //adds padding between the fields vertically for (int i = 1; i < 5; i++) { c.gridy++; //puts each field in a seperate line/row JLabel label = new JLabel(labels[i]);// c.fill = GridBagConstraints.HORIZONTAL; fields.add(label, c); JTextField textField = new JTextField(20); fields.add(textField, c); } JLabel l = new JLabel(labels[0]); JTextField t = new JTextField(30); question.add(l); question.add(t); base.add(question, BorderLayout.NORTH); base.add(fields, BorderLayout.CENTER); return base; }}


