将布局从null更改为BoxLayou后,Jpanel消失

时间:2016-09-20 06:24:33

标签: java swing user-interface

我在java中创建一个程序,类似于Quizlet。

我为每个Jpanel创建了一个类,其布局设置为null。唯一没有空布局的类是管理和包含所有具有CardLayout的JPanel的类。

无论如何,一切都运行正常,问题发生在我的一个类中,其中包含一个加载每个测验的Jpanel。我叫它LoadMenu。

GUI工作得很好,我只想检查一下盒子布局,所以我把它从空布局切换到了盒子。然后我意识到我的所有组件,除了一个,都消失在该布局上。现在,当我将布局更改回null时,一切都仍然消失,并且JPanel一起完全消失了。我点击了Control-Z并撤消了所有更改,但它仍然没有了。

无论如何我可以将它恢复到以前的状态吗?

谢谢

不确定这是否有帮助,但这是loadMenu类

public class LoadMenu extends JPanel implements ActionListener {
    private QuizManager manager;
    private FileManager file = new FileManager();
    private JComboBox comboBox;
    private JButton nextButton;
    private JButton refreshButton;
    private JButton backButton;
    private ProblemSet problemSetList;

    LoadMenu(ProblemSet newProblemSetList, QuizManager newManager){
        manager = newManager;
        problemSetList = newProblemSetList;

        JPanel loadMenu = new JPanel();
        loadMenu.setLayout(null);
        loadMenu.setBounds(1, 0, 681, 426);
        add(loadMenu);
        loadMenu.setLayout(null);
        loadMenu.setBounds(1, 0, 681, 426);

        JLabel selectQuizLabel = new JLabel("Select Quiz");
        selectQuizLabel.setFont(new Font("Times New Roman", Font.BOLD, 20));
        selectQuizLabel.setBounds(261, 104, 110, 31);
        loadMenu.add(selectQuizLabel);

        comboBox = new JComboBox();
        comboBox.setBounds(274, 194, 153, 22);
        loadMenu.add(comboBox);

        nextButton = new JButton("Next");

        nextButton.setBounds(530, 370, 139, 43);import junit.framework.TestCase;
        import junit.framework.TestCase;

        loadMenu.add(nextButton);
        nextButton.addActionListener(this);
        listQuizNames();

        refreshButton = new JButton("Refresh");
        refreshButton.addActionListener(this);
        refreshButton.setBounds(241, 229, 139, 31);
        loadMenu.add(refreshButton);

        backButton = new JButton("Back");
        backButton.addActionListener(this);
        backButton.setBounds(12, 370, 139, 43);
        loadMenu.add(backButton);


    }

    public void actionPerformed(ActionEvent e) {
        Object src = e.getSource();
        if(src == nextButton){
            manager.startQuiz((String)comboBox.getSelectedItem());

        }
        else if(src == refreshButton){
            listQuizNames();

        }
        else{
            manager.showNextCard("startMenu");
        }
    }

    public void listQuizNames(){
        ArrayList<String> quizList = new ArrayList<String>();
        file.readQuizNames(quizList);
        comboBox.setModel(new DefaultComboBoxModel(quizList.toArray()));

    }
}

1 个答案:

答案 0 :(得分:0)

尝试将面板添加到JFrame,这可能会有所帮助

JFrame frame = new JFrame();
frame.add(loadmenu);

在main函数或构造函数中 - 适合自己

setVisible(true);

希望它有效!!