首頁  >  文章  >  Java  >  標題可以是:如何使用 CardLayout 在 JFrame 中的 JPanel 之間切換?

標題可以是:如何使用 CardLayout 在 JFrame 中的 JPanel 之間切換?

Patricia Arquette
Patricia Arquette原創
2024-10-30 11:30:27682瀏覽

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

如何在 JFrame 內的 JPanel 之間進行轉換?

初始問題:

Java 組件初學者尋求幫助在 JFrame 內的 MenuPanel 和 GamePanel 之間切換。當前程式碼僅在呼叫 gameOn() 時建立一個空白 JFrame,而不是啟動遊戲。歡迎提出解決此問題的建議,考慮到 MenuPanel 中存在滑鼠偵聽器。

解決方案:

而不是採用刪除和添加組件的方法,建議使用 CardLayout。這樣可以實現面板之間的無縫過渡,無需重複添加和刪除。

程式碼實作:

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

說明:

  • 當調用被推到後面並呈現為隱藏,而GamePanel 將被帶到前面並顯示。

範例:

對於實際示範,請考慮以下程式碼:

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

此實作展示了使用CardLayout 在JFrame 內的MenuPanel 和GamePanel 之間平滑過渡.

以上是標題可以是:如何使用 CardLayout 在 JFrame 中的 JPanel 之間切換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn