How to have one JPanel show up and the second one disappear on button click?(如何让一个JPanel显示,而另一个在点击按钮时消失?)
问题描述
我有3个不同的类,Main Menu类上的设置按钮应该切换到Main Menu,但它只是隐藏了第一个面板,当我在另一个菜单上单击Return时也是一样,我想找到一个简单的解决方案而不使用布局管理器,因为我不知道如何让卡片布局与这两个类通信,但这就是解决方案,如果有人能给我一些如何实现的指示就太好了:
我想让另一个JPanel在单击按钮时显示出来,但它不起作用,第一个只是消失了。我如何修复此问题?
非常感谢!
推荐答案
这听起来像是CardLayout的用例。您有一个名为cards
的JPanel,它使用CardLayout管理器。您可以将所有面板(卡片)添加到该面板,为它们指定唯一的名称(例如,";Main_Menu";、";设置";等)。然后,您只需传递卡片面板,而不是传递每个面板中的其他面板,该面板可用于显示您希望显示的卡片,例如,在单击按钮时cl.show(cards, "SETTINGS");
。
更新
根据@c0der的建议(请参阅下面的注释部分),代码结构已更新。
Game.java
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class Game extends JFrame {
JPanel cards;
CardLayout cardLayout;
public Game(){
MainMenu mainMenu = new MainMenu();
Settings settings = new Settings();
cardLayout = new CardLayout();
cards = new JPanel(cardLayout);
cards.add(mainMenu, "MAIN_MENU");
cards.add(settings, "SETTINGS");
mainMenu.setSetBtnActionListener(new BtnController("SETTINGS"));
settings.setReturnBtnActionListener(new BtnController("MAIN_MENU"));
add(cards);
setSize(640,480);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
class BtnController implements ActionListener {
String cardName;
public BtnController(String cardName) {
this.cardName = cardName;
}
@Override
public void actionPerformed(ActionEvent e) {
cardLayout.show(cards, cardName);
}
}
public static void main(String[] args) {
new Game();
}
}
MainMenU.S.Java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
public class MainMenu extends JPanel {
JButton setBtn;
public MainMenu() {
setLayout(new GridLayout(1, 3));
JButton newGameBtn = new JButton("New Game");
JButton contBtn = new JButton("Continue");
setBtn = new JButton("Settings");
add(newGameBtn);
add(contBtn);
add(setBtn);
}
public void setSetBtnActionListener(ActionListener al) {
setBtn.addActionListener(al);
}
}
Settings.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
public class Settings extends JPanel {
JButton returnBtn;
public Settings() {
returnBtn = new JButton("Return");
setLayout(new BorderLayout());
add(returnBtn, BorderLayout.SOUTH);
}
public void setReturnBtnActionListener(ActionListener al) {
returnBtn.addActionListener(al);
}
}
这篇关于如何让一个JPanel显示,而另一个在点击按钮时消失?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何让一个JPanel显示,而另一个在点击按钮时消失?
基础教程推荐
- 如何对 HashSet 进行排序? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01