Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在我的游戏中实现ActionListeners第2部分_Java_Swing_Actionlistener - Fatal编程技术网

Java 在我的游戏中实现ActionListeners第2部分

Java 在我的游戏中实现ActionListeners第2部分,java,swing,actionlistener,Java,Swing,Actionlistener,我是stackoverflow社区的新成员,今年15岁。我目前正在尝试使用java独立开发一款石头剪刀游戏。我认为在这个项目上工作将是一次有益的经验,可以帮助我学习java及其基础知识。我对java编程语言有点陌生,所以请不要批评我,我正在通过反复试验慢慢学习。对于这个特定的项目,我决定使用Eclipse,因为与其他IDE相比,我更喜欢它的用户界面。无论如何,我决定实现JPanel以使游戏更加可视化。我的代码如下:从我的eclipse项目复制并粘贴: import javax.swing.JBu

我是stackoverflow社区的新成员,今年15岁。我目前正在尝试使用java独立开发一款石头剪刀游戏。我认为在这个项目上工作将是一次有益的经验,可以帮助我学习java及其基础知识。我对java编程语言有点陌生,所以请不要批评我,我正在通过反复试验慢慢学习。对于这个特定的项目,我决定使用Eclipse,因为与其他IDE相比,我更喜欢它的用户界面。无论如何,我决定实现JPanel以使游戏更加可视化。我的代码如下:从我的eclipse项目复制并粘贴:

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class prompt extends JPanel implements ActionListener {      
    public static void main(String []args) {
        JPanel panel = new JPanel();
        JButton rockButton = new JButton("ROCK");
        JButton scissorsButton = new JButton("SCISSORS");
        JButton paperButton = new JButton("PAPER");
        JFrame choicePrompt = new JFrame("Rock, Paper, Scissors Game");
        choicePrompt.add(panel);
        choicePrompt.setSize(300, 300);
        choicePrompt.setVisible(true);
        panel.add(rockButton);
        panel.add(scissorsButton);
        panel.add(paperButton);

        rockButton.addActionListener(new ActionListener() {
            public void rockChosen(ActionEvent r)
            {
                JLabel rock = new JLabel("You have chosen Rock!");
                panel.add(rock);
            }
        }
        scissorsButton.addActionListener(new ActionListener() {
            public void scissorsChosen(ActionEvent s)
            {
                JLabel scissors = new JLabel("You have chosen Scissors!");
                panel.add(scissors);
            }               
        }
        paperButton.addActionListener(new ActionListener() {
            public void paperChosen(ActionEvent p) 
            {
                JLabel paper = new JLabel("You have chosen Paper!");
                panel.add(paper);
            }   
        }
    }
}

我的ActionListeners在向JPanel添加按钮时有什么问题?我希望这个程序工作的方式是,当用户单击石头、布或剪刀时,它会显示JLabel以供他们做出决定。所有其他“shtuff”我都可以自己做。

您没有正确实现ActionLIstener,此接口中有actionPerformed方法(ActionEvent e),请尝试以下方法(适用于所有侦听器):


您的代码甚至不应该编译,如果是这种情况,并且您来这里寻求帮助,您需要通知我们这一点,并发布所有编译错误消息,指出是哪一行导致了这些错误。建议:

  • 不要让您的类扩展ActionListener
  • 给每个JButton一个匿名的内部类,类似于您正在做的事情,但是一个编译并具有actionPerformed方法的类
  • 在该方法内部,不要向GUI添加新的JLabel,因为继续按按钮添加新组件是没有意义的。相反,在已经是GUI一部分的JLabel上执行actionPerformed调用
    setText(…)
  • 将类名称的第一个字母大写,以符合Java命名标准

也许您应该只使用一个标签并更改文本。在
JPanel
中添加任何
JLabel
后,调用
panel.revalidate()
panel.repaint()
在代码中没有正确实现。其中实现了
actionPerformed()
methodSwing的布局管理器没有通知已经可见的Swing GUI中发生了什么,您必须以编程方式通知容器,例如panel.revalidate()和panel.repaint(),然后纸张将可见
paperButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) 
    {
        JLabel paper = new JLabel("You have chosen Paper!");
        panel.add(paper);
    }