Rumah  >  Artikel  >  Java  >  Tajuknya mungkin: Bagaimana Beralih Antara JPanels dalam JFrame Menggunakan CardLayout?

Tajuknya mungkin: Bagaimana Beralih Antara JPanels dalam JFrame Menggunakan CardLayout?

Patricia Arquette
Patricia Arquetteasal
2024-10-30 11:30:27683semak imbas

The title could be: How to Switch Between JPanels in a JFrame Using CardLayout?

Bagaimanakah Saya Boleh Beralih Antara JPanels dalam JFrame?

Soalan Awal:

Seorang pemula dalam komponen Java meminta bantuan dalam bertukar antara MenuPanel dan GamePanel dalam JFrame. Kod semasa hanya mencipta JFrame kosong apabila memanggil gameOn(), dan bukannya memulakan permainan. Cadangan adalah dialu-alukan untuk menyelesaikan isu ini, dengan mengambil kira kehadiran pendengar tetikus dalam MenuPanel.

Penyelesaian:

Daripada menggunakan pendekatan mengalih keluar dan menambah komponen , adalah dinasihatkan untuk menggunakan CardLayout. Ini membolehkan peralihan yang lancar antara panel tanpa memerlukan penambahan dan penyingkiran berulang.

Pelaksanaan Kod:

<code class="java">CardLayout cardLayout = new CardLayout();
JPanel mainPanel = new JPanel(cardLayout);

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

...
public void gameOn() {
    cardLayout.show(mainPanel, "game");
}</code>

Penjelasan:

  • Apabila gameOn() dipanggil, MenuPanel akan ditolak ke belakang dan dijadikan sebagai tersembunyi, manakala GamePanel akan dibawa ke hadapan dan dipaparkan.

Contoh:

Untuk demonstrasi praktikal, pertimbangkan kod berikut:

<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;

public class GameFrame extends JFrame implements ActionListener{

    CardLayout cardLayout;
    JPanel mainPanel;
    MenuPanel menu;
    GamePanel game;

    public GameFrame() {
        cardLayout = new CardLayout();
        mainPanel = new JPanel(cardLayout);
        menu = new MenuPanel();
        game = new GamePanel();
        mainPanel.add(menu, "menu");
        mainPanel.add(game, "game");


        JButton goGame = new JButton("Go TO Game");
        goGame.addActionListener(this);

        add(mainPanel);
        add(goGame, BorderLayout.SOUTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationByPlatform(true);
        setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        gameOn();
    }

    public void gameOn() {
        cardLayout.show(mainPanel, "game");
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                GameFrame gameFrame = new GameFrame();
            }
        });
    }
}

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>

Pelaksanaan ini mempamerkan penggunaan CardLayout untuk peralihan yang lancar antara MenuPanel dan GamePanel dalam JFrame .

Atas ialah kandungan terperinci Tajuknya mungkin: Bagaimana Beralih 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