我正在制作一个石头剪刀游戏,2名玩家必须选择是否要使用摇滚,纸张或剪刀。然后我的程序被用来比较选择。但是我将选择保存为变量时遇到了问题。 我可以打印出选项,但我不知道如何在actionlisteneres之外使用答案。
所以这是我的代码(有些名字是挪威语,所以可能有点令人困惑,但希望你能理解):
package oblig8;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
@SuppressWarnings("serial")
public class Oblig8 extends JFrame{
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame Frame = new JFrame("Stein - Saks - Papir");
Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Frame.setSize(500, 500);
Frame.setVisible(true);
JButton Spiller1 = new JButton("Spiller 1");
JButton Spiller2 = new JButton("Spiller 2");
Frame.getContentPane().add(Spiller1, BorderLayout.WEST);
Frame.getContentPane().add(Spiller2, BorderLayout.EAST);
String[] muligheter = new String[3];
muligheter[0]="Stein";
muligheter[1]="Saks";
muligheter[2]="Papir";
Spiller1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
int 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);}});
Spiller2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
int valg2 = JOptionPane.showOptionDialog(Frame,
"Spiller 2 har trykket",
"Stein - Saks - Papir",
JOptionPane.YES_NO_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
muligheter,
muligheter[2]);
System.out.println(valg2);}});
}}
答案 0 :(得分:0)
您需要使用main
方法创建Oblig8
类的实例,然后将其用作JFrame
。完成此操作后,可以将其余代码移动到该类的实例方法。
您的ActionListener
将在Oblig8
课程的实例中运行,并且他们可以访问其字段和方法。他们将能够写入实例字段,并且还可以调用实例方法来进一步发生。
因此,您的main
方法可能非常短:
public static void main(String[] args) {
Oblig8 oblig8 = new Oblig8();
oblig8.doSomeStuff();
}
然后,您可以将所有其他代码移入Oblig8
构造函数或其doSomeStuff
方法。
在Oblig8
课程中添加一些字段,然后让ActionListener
与他们互动。
答案 1 :(得分:0)
您可以在类范围中声明静态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);
}
});
...
}
}
答案 2 :(得分:0)
您的问题在于匿名类,它不存储稍后要访问的值。由于这些方法基本相同,因此继续创建适当的嵌套子类似乎是有效的。
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);
}
}
无论如何muligheter
final static
中的Oblig8
常量应该是JButton
常量,但它必须是此子类可以找到它的位置。
现在,您可以使用SpillerButton
s代替使用通用python run.py
s,并在想要显示结果时获取值。