Как правильно реализовать CardLayout с Eclipse WindowBuilder?

1

Поэтому, используя WindowBuilder (последняя версия Ecliple, Kepler), я создал фрейм так: Изображение 174551

Но я хотел бы переключаться между ними кнопкой, которую я создал на панелиWelcome. Я предполагаю, что добавляю itemListener, а затем создаю метод, который переключается между картами. Проблема в том, что я не знаю, как действовать дальше. Здесь код, который автоматически генерируется:

package client;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.CardLayout;
import java.awt.GridBagLayout;

import javax.swing.JLabel;

import java.awt.GridBagConstraints;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JComboBox;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;

public class Test {

    private JFrame frame;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test window = new Test();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public Test() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new CardLayout(0, 0));

        JPanel panelWelcome = new JPanel();
        frame.getContentPane().add(panelWelcome, "name_98933171901972");
        GridBagLayout gbl_panelWelcome = new GridBagLayout();
        gbl_panelWelcome.columnWidths = new int[]{0, 0, 0, 0, 0, 0, 0};
        gbl_panelWelcome.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
        gbl_panelWelcome.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
        gbl_panelWelcome.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
        panelWelcome.setLayout(gbl_panelWelcome);

        JLabel lblTitle = new JLabel("MEMEPlayer");
        lblTitle.setFont(new Font("Segoe UI", Font.BOLD, 12));
        GridBagConstraints gbc_lblTitle = new GridBagConstraints();
        gbc_lblTitle.insets = new Insets(0, 0, 5, 0);
        gbc_lblTitle.gridx = 5;
        gbc_lblTitle.gridy = 0;
        panelWelcome.add(lblTitle, gbc_lblTitle);

        JLabel lblNewLabel = new JLabel("Welcome! To get started, select a movie from the drop down menu");
        lblNewLabel.setFont(new Font("Segoe UI", Font.PLAIN, 11));
        GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
        gbc_lblNewLabel.insets = new Insets(0, 0, 5, 0);
        gbc_lblNewLabel.gridx = 5;
        gbc_lblNewLabel.gridy = 2;
        panelWelcome.add(lblNewLabel, gbc_lblNewLabel);

        JComboBox comboBox = new JComboBox();
        comboBox.setModel(new DefaultComboBoxModel(new String[] {"The Avengers (2012)", "Monsters, Inc. (2001)", "Prometheus (2012)"}));
        GridBagConstraints gbc_comboBox = new GridBagConstraints();
        gbc_comboBox.insets = new Insets(0, 0, 5, 0);
        gbc_comboBox.gridx = 5;
        gbc_comboBox.gridy = 4;
        panelWelcome.add(comboBox, gbc_comboBox);

        JButton btnNewButton = new JButton("Next >");
        GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
        gbc_btnNewButton.insets = new Insets(0, 0, 5, 0);
        gbc_btnNewButton.gridx = 5;
        gbc_btnNewButton.gridy = 6;
        btnNewButton.addItemListener((ItemListener) this);
        panelWelcome.add(btnNewButton, gbc_btnNewButton);

        JLabel lblNewLabel_1 = new JLabel("");
        lblNewLabel_1.setIcon(new ImageIcon("C:\\temp\\Meme1\\largeVLC.png"));
        GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints();
        gbc_lblNewLabel_1.gridx = 5;
        gbc_lblNewLabel_1.gridy = 8;
        panelWelcome.add(lblNewLabel_1, gbc_lblNewLabel_1);

        JPanel panelVideo = new JPanel();
        frame.getContentPane().add(panelVideo, "name_98968999152440");
    }
}

Спасибо за любую помощь!

  • 0
    Это не отвечает на ваш вопрос. Мой совет, не используйте генератор кода. Используйте хороший менеджер макетов, такой как макет формы или миграция макета. Код компоновки Ur будет содержать всего несколько строк, и его будет намного проще поддерживать, чем сгенерированный код компоновщика. Если вам нужны ссылки на хороших менеджеров по верстке, дайте мне знать
Теги:
swing
windowbuilder
cardlayout

1 ответ

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

Проблема, с которой я сталкиваюсь, заключается в том, что вы устанавливаете макет в рамку. Это проблема, потому что это означает, что кадр может иметь только видимый компонент за раз. Этот компонент является одной из панелей. Таким образом, вы можете поставить кнопку. Кнопка должна быть на одной из панелей, что может быть трудно поддерживать с точки зрения навигации.

Вместо этого, у вас есть основной JPanel, у которого есть CardLayout, и добавьте свои карточные панели на эту основную панель. Затем вы можете добавить основную панель в рамку вместе с кнопками для навигации.

Другой вариант - иметь панель меню с возможностью изменения карт, а затем, таким образом, вы можете сохранить макет карты на кадре, потому что управление навигацией осуществляется с помощью опций меню.

Узнайте, как использовать CardLayout, если вы не уверены даже в том, как использовать CardLayout, ручное кодирование. Вам понадобится ссылка на макет и вызовите один из своих методов навигации, например show(), next() или previous()

Вы также можете найти это сообщение интересным. Он использовал Netbeans, но, может быть, вы что-то подберете

Ещё вопросы

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