将ActionListeners实现到我的游戏第2部分

时间:2014-06-08 18:49:09

标签: java swing actionlistener

回顾一下我上一期的问题,我是一名15岁的新朋友。我目前正在尝试使用java独立开发Rock Paper Scissors游戏。我认为在这个项目上工作将是一个帮助我学习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);
            }   
        }
    }
}

在向JPanel添加按钮时,我的ActionListeners出了什么问题?我希望这个程序工作的方式是,当用户点击摇滚,纸张或剪刀时,它会显示JLabel以供他们决定。所有其他" shtuff"我可以自己做。

2 个答案:

答案 0 :(得分:1)

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

  • 不要让你的类扩展ActionListener。
  • 给每个JButton一个匿名的内部类,类似于你正在做的,但是一个编译并具有actionPerformed方法的内部类。
  • 在该方法的内部,不要向GUI添加新的JLabel,因为按下按钮继续添加新组件是没有意义的。而是在已经是GUI的一部分的JLabel上调用actionPerformed {/ 1}}。
  • 将您班级名称的第一个字母大写,以符合Java命名标准。

答案 1 :(得分:0)

你没有正确实现ActionLIstener,这个接口中有方法actionPerformed(ActionEvent e),试试这个(对你所有的听众来说):

paperButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) 
    {
        JLabel paper = new JLabel("You have chosen Paper!");
        panel.add(paper);
    }