JFrame 내에서 JPanel 전환
문제:
프로그래밍 방식으로 서로 다른 항목 간에 전환하는 방법 JFrame 내의 JPanel은 각 패널이 메뉴나 게임 인터페이스 등 고유한 용도로 사용됩니까?
해결책:
패널을 제거하거나 추가하는 대신 컨테이너 내의 여러 패널을 관리하는 효율적인 방법을 제공하는 CardLayout. 구현 방법은 다음과 같습니다.
CardLayout cardLayout = new CardLayout(); JPanel mainPanel = new JPanel(cardLayout);
mainPanel.add(menuPanel, "menu"); mainPanel.add(gamePanel, "game");
cardLayout.show(mainPanel, "game");
CardLayout 사용의 이점:
코드 예:
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 { CardLayout cardLayout; // CardLayout for managing panels JPanel mainPanel; // Main panel to hold the different JPanels public GameFrame() { cardLayout = new CardLayout(); mainPanel = new JPanel(cardLayout); MenuPanel menuPanel = new MenuPanel(); // Menu panel GamePanel gamePanel = new GamePanel(); // Game panel mainPanel.add(menuPanel, "menu"); // Add menu panel with "menu" identifier mainPanel.add(gamePanel, "game"); // Add game panel with "game" identifier JButton startGameButton = new JButton("Start Game"); startGameButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { cardLayout.show(mainPanel, "game"); // Show game panel when button is clicked } }); add(mainPanel); // Add main panel to the JFrame add(startGameButton, BorderLayout.SOUTH); // Add the start game button below the main panel setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(new Dimension(600, 400)); setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new GameFrame()); } class MenuPanel extends JPanel { // Menu panel with menu text MenuPanel() { setBackground(Color.GREEN); add(new JLabel("Menu")); } } class GamePanel extends JPanel { // Game panel with game text GamePanel() { setBackground(Color.BLUE); add(new JLabel("Game")); } } }
위 내용은 CardLayout을 사용하여 JFrame에서 JPanel을 효율적으로 전환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!