JFrame 내에서 JPanel 전환
질문:
Java 구성 요소를 처음 사용하는데 문제가 있습니다. JFrame 내에서 JPanel을 전환합니다. gameOn()을 호출하면 게임 패널을 표시하지 않고 프레임 표면이 공백이 됩니다. 이 문제를 어떻게 해결할 수 있나요?
답변:
구성 요소를 추가하고 제거하는 대신 CardLayout을 사용하는 것이 좋습니다. 방법은 다음과 같습니다.
이를 사용하여 CardLayout 개체와 JPanel을 만듭니다.
<code class="java">CardLayout cardLayout = new CardLayout(); JPanel mainPanel = new JPanel(cardLayout);</code>
mainPanel에 메뉴와 게임 패널을 추가합니다.
<code class="java">MenuPanel menu = new MenuPanel(); GamePanel game = new GamePanel(); mainPanel.add(menu, "menu"); mainPanel.add(game, "game");</code>
gameOn() 메서드에서 구성요소를 추가하거나 제거하지 않고 단순히 카드 레이아웃을 사용하여 게임 패널을 표시합니다.
<code class="java">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; 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!