Menukar JPanels dalam JFrame
Masalah:
Bagaimanakah saya boleh beralih secara pemrograman antara yang berbeza JPanels dalam JFrame, di mana setiap panel mempunyai tujuan yang berbeza, seperti menu atau antara muka permainan?
Penyelesaian:
Daripada mengalih keluar dan menambah panel, gunakan CardLayout, yang menyediakan cara yang cekap untuk mengurus berbilang panel dalam bekas. Begini cara untuk melaksanakannya:
CardLayout cardLayout = new CardLayout(); JPanel mainPanel = new JPanel(cardLayout);
mainPanel.add(menuPanel, "menu"); mainPanel.add(gamePanel, "game");
cardLayout.show(mainPanel, "game");
Faedah Menggunakan CardLayout:
Contoh Kod:
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")); } } }
Atas ialah kandungan terperinci Bagaimana untuk Beralih dengan Cekap Antara JPanels dalam JFrame Menggunakan CardLayout?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!