java jframe 切换_如何在JFrame中切换JPanels

而不是尝试添加删除组件,使用 CardLayoutCardLayout 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");}

当gameOn()被召唤时,menu将被推到后面,并被推到game前面。

这样您就不必继续添加和删除

这是一个你可以运行的例子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);

}}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值