Rumah > Java > javaTutorial > Bagaimana untuk Menukar JPanels dalam JFrame menggunakan CardLayout?

Bagaimana untuk Menukar JPanels dalam JFrame menggunakan CardLayout?

Patricia Arquette
Lepaskan: 2024-10-28 06:29:30
asal
892 orang telah melayarinya

How to Switch JPanels within a JFrame using CardLayout?

Menukar JPanels dalam JFrame

Soalan:
Saya baru menggunakan komponen Java dan menghadapi masalah menukar JPanels di dalam JFrame. Apabila saya memanggil gameOn(), permukaan Frame menjadi kosong tanpa memaparkan panel permainan. Bagaimanakah saya boleh membetulkan perkara ini?

Jawapan:

Daripada menambah dan mengalih keluar komponen, anda disyorkan untuk menggunakan CardLayout. Begini caranya:

  1. Buat objek CardLayout dan JPanel menggunakannya:

    <code class="java">CardLayout cardLayout = new CardLayout();
    JPanel mainPanel = new JPanel(cardLayout);</code>
    Salin selepas log masuk
  2. Tambahkan menu dan panel permainan pada MainPanel:

    <code class="java">MenuPanel menu = new MenuPanel();
    GamePanel game = new GamePanel();
    mainPanel.add(menu, "menu");
    mainPanel.add(game, "game");</code>
    Salin selepas log masuk
  3. Dalam kaedah gameOn(), cuma tunjukkan panel permainan menggunakan cardLayout tanpa menambah atau mengalih keluar sebarang komponen:

    <code class="java">public void gameOn() {
        cardLayout.show(mainPanel, "game");
    }</code>
    Salin selepas log masuk
  4. Apabila gameOn( ) dipanggil, panel menu akan disembunyikan di belakang panel permainan.

Contoh:

<code class="java">import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

class GameFrame extends JFrame implements ActionListener {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new GameFrame().setVisible(true));
    }

    private CardLayout cardLayout;
    private JPanel mainPanel;
    private MenuPanel menuPanel;
    private GamePanel gamePanel;

    public GameFrame() {
        cardLayout = new CardLayout();
        mainPanel = new JPanel(cardLayout);

        menuPanel = new MenuPanel();
        mainPanel.add(menuPanel, "menu");

        gamePanel = new GamePanel();
        mainPanel.add(gamePanel, "game");

        JButton goGameButton = new JButton("Go to Game");
        goGameButton.addActionListener(this);

        add(mainPanel);
        add(goGameButton, BorderLayout.SOUTH);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        cardLayout.show(mainPanel, "game");
    }

}

class MenuPanel extends JPanel {

    public MenuPanel() {
        setBackground(Color.GREEN);
        add(new JLabel("Menu"));
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    }
}

class GamePanel extends JPanel {

    public GamePanel() {
        setBackground(Color.BLUE);
        add(new JLabel("Game"));
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(300, 300);
    }
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Menukar JPanels dalam JFrame menggunakan CardLayout?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan