ホームページ >Java >&#&チュートリアル >タイトルは次のようになります。「CardLayout を使用して JFrame 内の JPanel を切り替える方法?」

タイトルは次のようになります。「CardLayout を使用して JFrame 内の JPanel を切り替える方法?」

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 11:30:27760ブラウズ

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>

説明:

  • gameOn() が呼び出されると、MenuPanel は背面にプッシュされて非表示としてレンダリングされ、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>

この実装は、JFrame 内で MenuPanel と GamePanel の間をスムーズに移行するための CardLayout の使用法を示しています。 .

以上がタイトルは次のようになります。「CardLayout を使用して JFrame 内の JPanel を切り替える方法?」の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。