> Java > java지도 시간 > CardLayout을 사용하여 JFrame 내에서 JPanel을 전환하는 방법은 무엇입니까?

CardLayout을 사용하여 JFrame 내에서 JPanel을 전환하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-28 06:29:30
원래의
893명이 탐색했습니다.

How to Switch JPanels within a JFrame using CardLayout?

JFrame 내에서 JPanel 전환

질문:
Java 구성 요소를 처음 사용하는데 문제가 있습니다. JFrame 내에서 JPanel을 전환합니다. gameOn()을 호출하면 게임 패널을 표시하지 않고 프레임 표면이 공백이 됩니다. 이 문제를 어떻게 해결할 수 있나요?

답변:

구성 요소를 추가하고 제거하는 대신 CardLayout을 사용하는 것이 좋습니다. 방법은 다음과 같습니다.

  1. 이를 사용하여 CardLayout 개체와 JPanel을 만듭니다.

    <code class="java">CardLayout cardLayout = new CardLayout();
    JPanel mainPanel = new JPanel(cardLayout);</code>
    로그인 후 복사
  2. mainPanel에 메뉴와 게임 패널을 추가합니다.

    <code class="java">MenuPanel menu = new MenuPanel();
    GamePanel game = new GamePanel();
    mainPanel.add(menu, "menu");
    mainPanel.add(game, "game");</code>
    로그인 후 복사
  3. gameOn() 메서드에서 구성요소를 추가하거나 제거하지 않고 단순히 카드 레이아웃을 사용하여 게임 패널을 표시합니다.

    <code class="java">public void gameOn() {
        cardLayout.show(mainPanel, "game");
    }</code>
    로그인 후 복사
  4. gameOn( )이 호출되면 메뉴 패널이 게임 패널 뒤에 숨겨집니다.

예:

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

class GameFrame extends JFrame implements ActionListener {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new GameFrame().setVisible(true));
    }

    private CardLayout cardLayout;
    private JPanel mainPanel;
    private MenuPanel menuPanel;
    private GamePanel gamePanel;

    public GameFrame() {
        cardLayout = new CardLayout();
        mainPanel = new JPanel(cardLayout);

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

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

        JButton goGameButton = new JButton("Go to Game");
        goGameButton.addActionListener(this);

        add(mainPanel);
        add(goGameButton, BorderLayout.SOUTH);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        cardLayout.show(mainPanel, "game");
    }

}

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 내에서 JPanel을 전환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿