gpt4 book ai didi

java - 难以从 Jpanel 中删除所有组件

转载 作者:行者123 更新时间:2023-11-29 04:04:49 25 4
gpt4 key购买 nike

大家好,

我正在编写一个项目的主菜单。菜单显示正确。我还为菜单上的三个按钮设置了 ActionListeners。

我想做的是在用户选择“开始新游戏”时为一组新的单选按钮重用 JPanel。

但是,编写 ActionPerformed 代码以从 JPanel 中删除现有组件让我感到难过。我知道 removeAll 在某种程度上很重要,但不幸的是 NetBeans 通知我不能在 ActionPerformed 中的 mainMenu JPanel 对象上调用它。所以我在下面的代码中将其注释掉了,但保留了它以便您可以看到我正在尝试做什么。

感谢您的想法或提示。

这是我的主要代码:

public class Main {

public static void main(String[] args) {
MainMenu menu = new MainMenu();
menu.pack();
menu.setVisible(true);
}
}

这是我的主菜单代码:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MainMenu extends JFrame implements ActionListener {
JButton startNewGame = new JButton("Start a New Game");
JButton loadOldGame = new JButton("Load an Old Game");
JButton seeInstructions = new JButton("Instructions");

public MainMenu() {
super("RPG Main Menu");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainMenu = new JPanel();
mainMenu.setLayout(new FlowLayout());
startNewGame.setMnemonic('n');
loadOldGame.setMnemonic('l');
seeInstructions.setMnemonic('i');
startNewGame.addActionListener(this);
loadOldGame.addActionListener(this);
seeInstructions.addActionListener(this);
mainMenu.add(startNewGame);
mainMenu.add(loadOldGame);
mainMenu.add(seeInstructions);
setContentPane(mainMenu);

}

public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if (source == startNewGame) {
// StartNewGame code goes here
// mainMenu.removeAll();
}
if (source == loadOldGame) {
// LoadOldGame code goes here
}
if (source == seeInstructions) {
// Quit code goes here
}
}
}

最佳答案

考虑使用 CardLayout相反,它管理共享相同显示空间的两个或多个组件(通常是 JPanel 实例)。这样您就不必在运行时摆弄添加和删除组件。

关于java - 难以从 Jpanel 中删除所有组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/574492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com