>  기사  >  Java  >  제목은 다음과 같을 수 있습니다. CardLayout을 사용하여 JFrame에서 JPanel을 전환하는 방법은 무엇입니까?

제목은 다음과 같을 수 있습니다. CardLayout을 사용하여 JFrame에서 JPanel을 전환하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-30 11:30:27683검색

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>

이 구현은 CardLayout을 사용하여 JFrame 내에서 MenuPanel과 GamePanel 사이를 원활하게 전환하는 방법을 보여줍니다. .

위 내용은 제목은 다음과 같을 수 있습니다. CardLayout을 사용하여 JFrame에서 JPanel을 전환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.