如何保存actionlistener的输入,然后与Java中的其他输入进行比较?
我正在做一个石头-布-剪刀的游戏,两个玩家必须选择是使用石头、布还是剪刀。然后我的程序被用来比较选择。但我在将选择保存为变量时遇到问题。 我可以打印出选择,但我不知道如何在ActionListener之外使用答案 这就是我的代码(有些名字是挪威语的,所以可能有点混乱,但希望你能理解):如何保存actionlistener的输入,然后与Java中的其他输入进行比较?,java,jframe,actionlistener,Java,Jframe,Actionlistener,我正在做一个石头-布-剪刀的游戏,两个玩家必须选择是使用石头、布还是剪刀。然后我的程序被用来比较选择。但我在将选择保存为变量时遇到问题。 我可以打印出选择,但我不知道如何在ActionListener之外使用答案 这就是我的代码(有些名字是挪威语的,所以可能有点混乱,但希望你能理解): 您需要使用main方法来创建Oblig8类的实例,然后将其用作JFrame。完成此操作后,可以将其余代码移动到该类的实例方法 然后,您的ActionListeners将在Oblig8类的实例中运行,并且它们将可以
您需要使用
main
方法来创建Oblig8
类的实例,然后将其用作JFrame
。完成此操作后,可以将其余代码移动到该类的实例方法
然后,您的ActionListener
s将在Oblig8
类的实例中运行,并且它们将可以访问其字段和方法。他们将能够写入实例字段,也能够调用实例方法来获得进一步的结果
因此,您的main
方法可能非常简短:
public static void main(String[] args) {
Oblig8 oblig8 = new Oblig8();
oblig8.doSomeStuff();
}
然后可以将所有其他代码移动到Oblig8
构造函数或其doSomeStuff
方法中
向
Oblig8
类添加一些字段,然后让ActionListener
与它们交互。您可以在类范围内声明静态int变量,并将答案存储在这些变量中,然后根据需要使用它
public class Oblig8 extends JFrame {
static int valg1;
static int valg2;
public static void main(String[] args) {
...
Spiller1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
valg1 = JOptionPane.showOptionDialog(Frame,
"Spiller 1 har trykket",
"Stein - Saks - Papir",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
muligheter,
muligheter[2]);
System.out.println(valg1);
}
});
...
}
}
您的问题在于匿名类,它不存储以后要访问的值。由于这些方法基本相同,因此继续创建一个适当的嵌套子类似乎是有效的
static class SpillerButton extends JButton implements ActionListener {
int valg;
SpillerButton(String name){
super(name);
addActionListener(this);
}
public void actionPerformed(ActionEvent evt) {
valg = JOptionPane.showOptionDialog(null,
getText()+"har trykket",
"Stein - Saks - Papir",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
muligheter,
muligheter[2]);
System.out.println(valg);
}
}
在Oblig8
中,muligheter
可能是一个final static
常量,但它需要在这个子类可以找到它的地方
现在,不要使用泛型
JButton
s,而是使用SpillerButton
s,并在需要显示结果时获取值。您应该遵循使用以小写字母开头的变量名的惯例。这当然是一种快速启动和运行某些程序的方法,但这几乎肯定不是正确的前进方向。尽量避免使用全局变量,并将它们存储为实例字段。(例如,想想如果你想同时打开两扇窗户会发生什么。)@Chiatic security是的,我同意,这不是一个好的设计。为了实现更好的设计,我将创建自己的JFrame或JPanel类,其中的字段保存选定的选项,并将actionPerformed()方法中的逻辑提取到一个单独的方法中,这样逻辑就不会绑定到匿名类。让我们看看OP会说什么:)
static class SpillerButton extends JButton implements ActionListener {
int valg;
SpillerButton(String name){
super(name);
addActionListener(this);
}
public void actionPerformed(ActionEvent evt) {
valg = JOptionPane.showOptionDialog(null,
getText()+"har trykket",
"Stein - Saks - Papir",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
muligheter,
muligheter[2]);
System.out.println(valg);
}
}