Rumah > Java > javaTutorial > Bagaimana untuk Beralih dengan Cekap Antara JPanels dalam JFrame Menggunakan CardLayout?

Bagaimana untuk Beralih dengan Cekap Antara JPanels dalam JFrame Menggunakan CardLayout?

Susan Sarandon
Lepaskan: 2024-10-28 07:30:30
asal
772 orang telah melayarinya

How to Efficiently Switch Between JPanels in a JFrame Using CardLayout?

Menukar JPanels dalam JFrame

Masalah:

Bagaimanakah saya boleh beralih secara pemrograman antara yang berbeza JPanels dalam JFrame, di mana setiap panel mempunyai tujuan yang berbeza, seperti menu atau antara muka permainan?

Penyelesaian:

Daripada mengalih keluar dan menambah panel, gunakan CardLayout, yang menyediakan cara yang cekap untuk mengurus berbilang panel dalam bekas. Begini cara untuk melaksanakannya:

  1. Buat objek CardLayout dan tetapkan kepada JPanel sebagai pengurus reka letaknya:
CardLayout cardLayout = new CardLayout();
JPanel mainPanel = new JPanel(cardLayout);
Salin selepas log masuk
  1. Tambahkan panel yang dikehendaki pada panel utama, mengenal pasti setiap satu dengan nama unik:
mainPanel.add(menuPanel, "menu");
mainPanel.add(gamePanel, "game");
Salin selepas log masuk
  1. Dalam logik permainan, gunakan kaedah show() pada CardLayout untuk memaparkan panel yang dikehendaki:
cardLayout.show(mainPanel, "game");
Salin selepas log masuk

Faedah Menggunakan CardLayout:

  1. Bertukar antara panel dengan mudah tanpa memerlukan operasi tambah/buang yang rumit.
  2. Ringkaskan kod struktur dan mengurangkan risiko ralat masa jalan.
  3. Uruskan berbilang panel dengan cekap dalam satu bekas.

Contoh Kod:

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;

public class GameFrame extends JFrame {

    CardLayout cardLayout; // CardLayout for managing panels
    JPanel mainPanel; // Main panel to hold the different JPanels

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

        MenuPanel menuPanel = new MenuPanel(); // Menu panel
        GamePanel gamePanel = new GamePanel(); // Game panel

        mainPanel.add(menuPanel, "menu"); // Add menu panel with "menu" identifier
        mainPanel.add(gamePanel, "game"); // Add game panel with "game" identifier

        JButton startGameButton = new JButton("Start Game");
        startGameButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                cardLayout.show(mainPanel, "game"); // Show game panel when button is clicked
            }
        });

        add(mainPanel); // Add main panel to the JFrame
        add(startGameButton, BorderLayout.SOUTH); // Add the start game button below the main panel

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(new Dimension(600, 400));
        setVisible(true);
    }

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

    class MenuPanel extends JPanel { // Menu panel with menu text

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

    class GamePanel extends JPanel { // Game panel with game text

        GamePanel() {
            setBackground(Color.BLUE);
            add(new JLabel("Game"));
        }
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Beralih dengan Cekap Antara 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