尝试将使用 CardLayout 的 JPanel 添加到 JFrame



我无法发现错误,当我运行时我得到一个空白框架

正在尝试制作一个小程序,其中您看到的第一个屏幕包含 4 个按钮,每个按钮对应于我必须实现的每个排序算法,然后单击按钮后,它会将您带到一个新面板,该面板具有正在排序的数组的图形表示(我已经在较小的小程序中完成了此操作)

这是我的代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class newCLayoutTest extends JPanel{
    private JPanel holderPanel, mainPanel, bubblePanel, selectionPanel, mergePanel, quickPanel;
    private JButton bubbleButton, selectionButton, mergeButton, quickButton;
    private CardLayout cardLayout = new CardLayout();
    public newCLayoutTest()
    {
        JLabel label = new JLabel("Label");
        holderPanel = new JPanel();
        mainPanel = new JPanel();
        bubblePanel = new JPanel();
        selectionPanel = new JPanel();
        mergePanel = new JPanel();
        quickPanel = new JPanel();
        holderPanel.setLayout(cardLayout);
        bubbleButton = new JButton();
        selectionButton = new JButton();
        mergeButton = new JButton();
        quickButton = new JButton();
        //mainPanel.setLayout(new GridLayout(2,2));
        mainPanel.add(bubbleButton);
        mainPanel.add(selectionButton);
        mainPanel.add(mergeButton);
        mainPanel.add(quickButton);
        bubblePanel.add(label);
        holderPanel.add(mainPanel, "1");
        holderPanel.add(bubblePanel, "2");
        cardLayout.show(holderPanel,"2");


    }
}

和控制器类:

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class testControl extends JFrame{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable() {

        public void run() {
            newCLayoutTest panel = new newCLayoutTest();
            JFrame frame = new JFrame("LET THIS WORK");
        //  frame.setLayout(new BorderLayout());
            frame.add(panel);
            //frame.getContentPane().add(panel);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(600, 400);
            frame.setVisible(true);
        }
    });
}
}

holderPanel尚未添加到包含组件的面板中,即newCLayoutTest

add(holderPanel);

请注意,没有必要JPanel子类化,因为您不会向面板添加任何新功能。您只需创建一个面板并添加组件即可。还要遵循Java命名约定,即使用大写首字母作为类名,例如 NewCLayoutTest

最新更新