Попытка добавить JPanel, который использует CardLayout к JFrame

1

Я не могу заметить ошибку, когда я бегу, я получаю пустую рамку

Я пытаюсь сделать апплет, где первый экран, который вы видите, содержит 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);
        }
    });
}
}
Теги:
swing
layout-manager
cardlayout

1 ответ

2
Лучший ответ

holderPanel не добавлен в панель, содержащую компоненты, а именно newCLayoutTest

add(holderPanel);

Обратите внимание, что нет необходимости подклассифицировать JPanel поскольку вы не добавляете никаких новых функций на панель. Вы можете просто создать панель и добавить компоненты. Также следуйте соглашениям Java Naming, т. NewCLayoutTest начальные буквы в верхнем регистре для имен классов, например NewCLayoutTest

  • 0
    Да! это сработало! Имеет ли значение, где добавить (holderPanel); размещен?
  • 0
    Не совсем так долго, как кажется после того, как панель была создана

Ещё вопросы

Сообщество Overcoder
Наверх
Меню