초기 질문:
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>
설명:
예:
실제 데모를 위해 다음 코드를 고려하세요.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!