本文介紹了如何讓一個(gè)JPanel顯示,而另一個(gè)在點(diǎn)擊按鈕時(shí)消失?的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!
問題描述
我有3個(gè)不同的類,Main Menu類上的設(shè)置按鈕應(yīng)該切換到Main Menu,但它只是隱藏了第一個(gè)面板,當(dāng)我在另一個(gè)菜單上單擊Return時(shí)也是一樣,我想找到一個(gè)簡(jiǎn)單的解決方案而不使用布局管理器,因?yàn)槲也恢廊绾巫尶ㄆ季峙c這兩個(gè)類通信,但這就是解決方案,如果有人能給我一些如何實(shí)現(xiàn)的指示就太好了:
我想讓另一個(gè)JPanel在單擊按鈕時(shí)顯示出來,但它不起作用,第一個(gè)只是消失了。我如何修復(fù)此問題?
非常感謝!
推薦答案
這聽起來像是CardLayout的用例。您有一個(gè)名為cards
的JPanel,它使用CardLayout管理器。您可以將所有面板(卡片)添加到該面板,為它們指定唯一的名稱(例如,";Main_Menu";、";設(shè)置";等)。然后,您只需傳遞卡片面板,而不是傳遞每個(gè)面板中的其他面板,該面板可用于顯示您希望顯示的卡片,例如,在單擊按鈕時(shí)cl.show(cards, "SETTINGS");
。
更新
根據(jù)@c0der的建議(請(qǐng)參閱下面的注釋部分),代碼結(jié)構(gòu)已更新。
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);
}
}
這篇關(guān)于如何讓一個(gè)JPanel顯示,而另一個(gè)在點(diǎn)擊按鈕時(shí)消失?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,