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