JPanel с CardLayout пуст, когда он изменился - PullRequest
0 голосов
/ 01 сентября 2018

У меня проблема с JPanel. Это CardLayout и две подпанели, которые меняются. Мне нужно сделать кнопку, которая переключается с субпанели 1 на 2 и отображает выбранный продукт.

ВОПРОС: Когда я выбираю карточку продукта, JPanel меняется, но она пуста. Если я перейду через окно мышью, появятся кнопки, но не JLabels. И если я изменю размеры окон, это снова пусто. В чем проблема?

EDIT: Вот код, который возвращает ту же ошибку.

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.event.*;

import javax.swing.*;

public class MainFrame extends JFrame {

    private static final long serialVersionUID = 1L;
    // private String title;
    // private Dimension d;

    public MainFrame(String title, Dimension d) {

        // LoginPanel template = new LoginPanel(this);
        // RegisterPanel template = new RegisterPanel(this);
        CustomerPanel template = new CustomerPanel(this);
        this.setTitle(title);
        this.setSize(d);
        this.setVisible(true);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.getContentPane().add(template);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new MainFrame("Fubars", new Dimension(800, 650));
        });
    }
}

@SuppressWarnings("serial")
class CustomerPanel extends JPanel {

    MainFrame mf;

    JPanel one, two;
    JPanel panel;

    public CustomerPanel(MainFrame mf) {
        this.mf = mf;
        mf.getContentPane().setLayout(new CardLayout(0, 0));

        JPanel container = new JPanel();
        mf.getContentPane().add(container, "name_36743208542992");
        container.setLayout(new BorderLayout(0, 0));

        JPanel back = new JPanel();
        container.add(back, BorderLayout.NORTH);
        back.setLayout(new FlowLayout(FlowLayout.LEFT));

        JButton btnControl = new JButton("<");
        back.add(btnControl);

        panel = new JPanel();
        container.add(panel, BorderLayout.CENTER);
        CardLayout cl = new CardLayout(0, 0);
        panel.setLayout(cl);

        one = new OnePanel(this.mf);
        two = new JPanel();
        panel.add(one, "1");
        panel.add(two, "2");

        btnControl.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                two = new LoginPanel(mf);
                cl.next(panel);
            }
        });
    }
}

@SuppressWarnings("serial")
class LoginPanel extends JPanel {

    // private MainFrame mf;
    private JTextField textField;
    private JPasswordField passwordField;

    public LoginPanel(MainFrame mf) {

        // this.mf = mf;
        mf.getContentPane().setLayout(new BorderLayout(0, 0));

        JPanel panel = new JPanel();
        mf.getContentPane().add(panel, BorderLayout.CENTER);
        GridBagLayout gbl_panel = new GridBagLayout();
        gbl_panel.columnWidths = new int[] { 100, 55, 72, 171, 0 };
        gbl_panel.rowHeights = new int[] { 69, 22, 22, 0 };
        gbl_panel.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE };
        gbl_panel.rowWeights = new double[] { 0.0, 0.0, 0.0, Double.MIN_VALUE };
        panel.setLayout(gbl_panel);

        JLabel lblNewLabel = new JLabel("Email");
        GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
        gbc_lblNewLabel.fill = GridBagConstraints.HORIZONTAL;
        gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
        gbc_lblNewLabel.gridx = 1;
        gbc_lblNewLabel.gridy = 1;
        panel.add(lblNewLabel, gbc_lblNewLabel);

        textField = new JTextField();
        GridBagConstraints gbc_textField = new GridBagConstraints();
        gbc_textField.anchor = GridBagConstraints.NORTH;
        gbc_textField.insets = new Insets(0, 0, 5, 0);
        gbc_textField.gridx = 3;
        gbc_textField.gridy = 1;
        panel.add(textField, gbc_textField);
        textField.setColumns(15);

        JLabel lblNewLabel_1 = new JLabel("Password");
        GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints();
        gbc_lblNewLabel_1.anchor = GridBagConstraints.WEST;
        gbc_lblNewLabel_1.insets = new Insets(0, 0, 0, 5);
        gbc_lblNewLabel_1.gridx = 1;
        gbc_lblNewLabel_1.gridy = 2;
        panel.add(lblNewLabel_1, gbc_lblNewLabel_1);

        passwordField = new JPasswordField();
        passwordField.setColumns(15);
        GridBagConstraints gbc_passwordField = new GridBagConstraints();
        gbc_passwordField.anchor = GridBagConstraints.NORTH;
        gbc_passwordField.gridx = 3;
        gbc_passwordField.gridy = 2;
        panel.add(passwordField, gbc_passwordField);

        JPanel panel_1 = new JPanel();
        mf.getContentPane().add(panel_1, BorderLayout.SOUTH);
        panel_1.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 30));

        JButton btnNewButton = new JButton("LOGIN");
        panel_1.add(btnNewButton);
        btnNewButton.setActionCommand("login");

        JButton btnRegistration = new JButton("REGISTER");
        panel_1.add(btnRegistration);
        btnRegistration.setActionCommand("registration");

    }

}

@SuppressWarnings("serial")
class OnePanel extends JPanel {

    // private MainFrame mf;

    public OnePanel(MainFrame mf) {
        // this.mf = mf;

        mf.getContentPane().setLayout(new CardLayout(0, 0));

        JPanel container = new JPanel();
        mf.getContentPane().add(container, "name_36743208542992");
        container.setLayout(new BorderLayout(0, 0));

        JPanel image = new JPanel();
        container.add(image, BorderLayout.CENTER);

        JButton btnImageBack = new JButton("<");
        image.add(btnImageBack);

        JLabel imageContainer = new JLabel("Images");
        image.add(imageContainer);
        imageContainer.setBounds(new Rectangle(100, 100, 100, 100));
        imageContainer.setHorizontalTextPosition(SwingConstants.CENTER);
        imageContainer.setHorizontalAlignment(SwingConstants.CENTER);
        imageContainer.setAlignmentX(Component.CENTER_ALIGNMENT);
        imageContainer.setIconTextGap(3);
        imageContainer.setIcon(null);

        JButton btnImageForward = new JButton(">");
        image.add(btnImageForward);
        btnImageForward.setAlignmentY(Component.BOTTOM_ALIGNMENT);
        btnImageForward.setAlignmentX(Component.CENTER_ALIGNMENT);

        JPanel info = new JPanel();
        container.add(info, BorderLayout.EAST);
        GridBagLayout gbl_info = new GridBagLayout();
        gbl_info.columnWidths = new int[] { 0, 0, 63, 0, 0, 0 };
        gbl_info.rowHeights = new int[] { 0, 0, 25, 0, 0, 0, 0 };
        gbl_info.columnWeights = new double[] { 1.0, 0.0, 1.0, 0.0, 1.0, Double.MIN_VALUE };
        gbl_info.rowWeights = new double[] { 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE };
        info.setLayout(gbl_info);

        JLabel lblTitle = new JLabel("Title");
        GridBagConstraints gbc_lblTitle = new GridBagConstraints();
        gbc_lblTitle.anchor = GridBagConstraints.NORTHWEST;
        gbc_lblTitle.insets = new Insets(0, 0, 5, 5);
        gbc_lblTitle.gridx = 2;
        gbc_lblTitle.gridy = 1;
        info.add(lblTitle, gbc_lblTitle);

        JLabel lblDescription = new JLabel("Description");
        GridBagConstraints gbc_lblDescription = new GridBagConstraints();
        gbc_lblDescription.anchor = GridBagConstraints.WEST;
        gbc_lblDescription.insets = new Insets(0, 0, 5, 5);
        gbc_lblDescription.gridx = 2;
        gbc_lblDescription.gridy = 2;
        info.add(lblDescription, gbc_lblDescription);

        JLabel lblPrice = new JLabel("Price");
        GridBagConstraints gbc_lblPrice = new GridBagConstraints();
        gbc_lblPrice.anchor = GridBagConstraints.WEST;
        gbc_lblPrice.insets = new Insets(0, 0, 5, 5);
        gbc_lblPrice.gridx = 2;
        gbc_lblPrice.gridy = 3;
        info.add(lblPrice, gbc_lblPrice);
        lblPrice.setToolTipText("Price");

        JButton btnAddCart = new JButton("Add to Cart");
        GridBagConstraints gbc_btnAddCart = new GridBagConstraints();
        gbc_btnAddCart.insets = new Insets(0, 0, 5, 5);
        gbc_btnAddCart.anchor = GridBagConstraints.WEST;
        gbc_btnAddCart.gridx = 2;
        gbc_btnAddCart.gridy = 4;
        info.add(btnAddCart, gbc_btnAddCart);

    }
}
...