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

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

Susan Sarandon
Susan Sarandonasal
2024-10-28 07:30:30676semak imbas

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);
  1. Tambahkan panel yang dikehendaki pada panel utama, mengenal pasti setiap satu dengan nama unik:
mainPanel.add(menuPanel, "menu");
mainPanel.add(gamePanel, "game");
  1. Dalam logik permainan, gunakan kaedah show() pada CardLayout untuk memaparkan panel yang dikehendaki:
cardLayout.show(mainPanel, "game");

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"));
        }
    }
}

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!

Kenyataan:
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