gpt4 book ai didi

java - 关于创建游戏菜单我在哪里搞砸了?

转载 作者:行者123 更新时间:2023-12-01 14:34:03 31 4
gpt4 key购买 nike

我现在正在尝试为游戏创建一个基本的游戏菜单。我现在只是测试菜单,我编写的大部分选项只是为了测试菜单是否真的有效。所以我还有一个 Menu 类和一个 OptionPanel 类。

这是菜单类:

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

public class Main extends JFrame {

JPanel cardPanel;

public Main(String title) {
super(title);
setBounds(100, 100, 800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

cardPanel = new JPanel();
CardLayout cl = new CardLayout();
cardPanel.setLayout(cl);


OptionPanel panel1 = new OptionPanel(this);
Board panel2 = new Board();
Rules panel3 = new Rules();



cardPanel.add(panel1,"1");
cardPanel.add(panel2,"2");
cardPanel.add(panel3,"3");

add(cardPanel);

setVisible(true);
}

public static void main(String[] args)
{
Main w = new Main("AP Animation Demo");
}

public void changePanel() {
((CardLayout)cardPanel.getLayout()).next(cardPanel);
requestFocus();
}

}

这是我的选项面板类:

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


public class OptionPanel extends JPanel implements ActionListener {

Main w;

public OptionPanel(Main w) {
this.w = w;
JButton button = new JButton("Press me!");
button.addActionListener(this);
add(button);
JButton button2 = new JButton("Game rules");
button2.addActionListener(this);
add(button2);
}

public void paintComponent(Graphics g)
{
super.paintComponent(g);
setBackground(Color.BLACK);
}// Call JPanel's paintComponent method to paint the background

public void actionPerformed(ActionEvent e) {

w.changePanel();
}

}

我该如何做到这一点,以便当菜单弹出时,我可以单击一个进入游戏的按钮,而当单击另一个按钮时,链接到另一个屏幕。我认为这与 actionPerformed 的事情有关,所以我尝试添加 if (e.getSource == button) 之类的东西,但它找不到任何按钮变量。有什么建议/反馈吗?

最佳答案

如果您希望 actionPerformed() 方法能够访问按钮变量,则该变量必须具有实例范围(或静态,几乎总是不太优选)。在您编写的方法中引用它是行不通的,因为 button 变量是构造函数的本地变量。

评论中的建议是为每个按钮制作一个单独的ActionListener;如果为多个按钮调用一个 actionPerformed() 方法,则只需使用 if (e.getSource() == button) 。对于 SO 答案来说,它们之间的差异有点大;您可以在 Oracle 的 Java 教程中获取有关操作监听器的教程。

上面开始的方式表明您将使用 OptionPanel 作为所有按钮的单个操作监听器,因此需要测试哪个按钮调用了它。相反,如果每个按钮都有一个单独的操作监听器,那么它就知道哪个按钮调用了它并且不需要测试。

尝试查找“匿名内部类”,因为它们与 Java 中的操作监听器相关。

关于java - 关于创建游戏菜单我在哪里搞砸了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16629730/

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