所以我有我的JButtons
public static JButton textYes = new JButton("Yes");
public static JButton textNo = new JButton("No");
我的菜单
public static String choiceReroll = "";
public static String menu = "";
和我的main()方法
public static void main(String[] args) throws IOException {
Greed gui = new Greed();
gui.launchFrame();
redirectSystemStreams();
Container contentPane = f.getContentPane();
contentPane.add(new Greed());
Scanner is = new Scanner(System.in);
System.out.println("Welcome to Greed...");
do {
System.out.println("Would you like to play? (yes/no)");
menu = is.next();
switch (menu) {
case "yes":
jTextArea1.setText(null);
diceOne = 0;
diceTwo = 0;
diceThree = 0;
diceFour = 0;
diceFive = 0;
System.out.println("Rolling...");
Game();
break;
case "no":
System.out.println("Goodbye...");
System.exit(0);
break;
default:
invalidInput();
break;
}
} while (!"yes".equals(menu) || !"no".equals(menu));
}
然后我有我的actionListeners
textYes.addActionListener(this);
textNo.addActionListener(this);
我如何制作它,以便当我点击一个按钮或另一个按钮时,它将输入文本,请求用户输入menu = is.next();
我还希望它只输入文字,具体取决于它点击的按钮。并且无论要求输入的变量是什么,都要输入文本
例如:
menu = is.next();
VS
choiceReroll = is.next();
编辑:更多信息......
我也有我的performAction()方法
public void actionPerformed(ActionEvent e) {
jTextArea1.setText(null);
if (box1.isSelected()) {
System.out.println("1 is selected");
willRerollDiceOne = true;
}
else {
System.out.println("1 not selected");
willRerollDiceOne = false;
}
if (box2.isSelected()) {
System.out.println("2 is selected");
willRerollDiceTwo = true;
}
else {
System.out.println("2 not selected");
willRerollDiceTwo = false;
}
if (box3.isSelected()) {
System.out.println("3 is selected");
willRerollDiceThree = true;
}
else {
System.out.println("3 not selected");
willRerollDiceThree = false;
}
if (box4.isSelected()) {
System.out.println("4 is selected");
willRerollDiceFour = true;
}
else {
System.out.println("4 not selected");
willRerollDiceFour = false;
}
if (box5.isSelected()) {
System.out.println("5 is selected");
willRerollDiceFive = true;
}
else {
System.out.println("5 not selected");
willRerollDiceFive = false;
}
编辑:我为按钮添加了actionPerformed,但我现在只打算显示一个
if (area == "menu") {
if(e.getSource() == textYes){
menu = "yes";
}
if(e.getSource() == textNo){
menu = "no";
}
}
但是当我点击按钮时,它没有更新,为什么? 我该如何解决这个问题?
编辑:在if语句
中添加了“test”打印输出 if ("menu".equals(area)) {
if(e.getSource() == textYes){
menu = "yes";
System.out.println("test");
}
if(e.getSource() == textNo){
menu = "no";
}
每次单击“是”按钮时,
打印“test”
编辑:这是方法的其余部分:
public static void main(String[] args) throws IOException {
Greed gui = new Greed();
gui.launchFrame();
redirectSystemStreams();
Container contentPane = f.getContentPane();
contentPane.add(new Greed());
Scanner is = new Scanner(System.in);
System.out.println("Welcome to Greed...");
do {
System.out.println("Would you like to play? (yes/no)");
area = "menu";
menu = is.next();
switch (menu) {
case "yes":
jTextArea1.setText(null);
diceOne = 0;
diceTwo = 0;
diceThree = 0;
diceFour = 0;
diceFive = 0;
System.out.println("Rolling...");
Game();
break;
case "no":
System.out.println("Goodbye...");
System.exit(0);
break;
default:
invalidInput();
break;
}
} while (!"yes".equals(menu) || !"no".equals(menu));
area = "";
}
public static void Game() throws IOException {
rollDiceOne();
rollDiceTwo();
rollDiceThree();
rollDiceFour();
rollDiceFive();
//displayDice();
displayDiceValues();
f.validate();
f.repaint();
choiceRerollDice();
}
public static void choiceRerollDice() {
Scanner is = new Scanner(System.in);
do {
if (!canRerollDiceOne && !canRerollDiceTwo && !canRerollDiceThree && !canRerollDiceFour && !canRerollDiceFive) {
System.out.println("Sorry, but you may not reroll any more dice...");
displayDiceValues();
System.exit(0);
}
else {
System.out.println("Would you like to reroll any (more) dice? (yes/no)");
choiceReroll = is.next();
switch (choiceReroll) {
case "yes":
rerollDice();
break;
case "no":
//endTurn();
displayDiceValues();
f.repaint();
//calculatePlayer1Score();
//System.out.println("Thank you for playing!");
//System.out.println("Goodbye!");
System.exit(0);
default:
invalidInput();
}
}
} while (!"yes".equals(choiceReroll) || !"no".equals(choiceReroll));
}
public static void rerollDice() {
Scanner is = new Scanner(System.in);
System.out.println("Which dice would you like to reroll? (Click the box under the dice!)");
rollSel = is.next();
switch (rollSel) {
case "roll":
if (willRerollDiceOne) {
if (canRerollDiceOne) {
diceOne = 0;
rollDiceOne();
canRerollDiceOne = false;
box1.setEnabled(false);
}
else {
System.out.println("error");
}
}
else {
}
if (willRerollDiceTwo) {
if (canRerollDiceTwo) {
diceTwo = 0;
rollDiceTwo();
canRerollDiceTwo = false;
box2.setEnabled(false);
}
else {
System.out.println("error");
}
}
else {
}
if (willRerollDiceThree) {
if (canRerollDiceThree) {
diceThree = 0;
rollDiceThree();
canRerollDiceThree = false;
box3.setEnabled(false);
}
}
else {
}
if (willRerollDiceFour) {
if (canRerollDiceFour) {
diceFour = 0;
rollDiceFour();
canRerollDiceFour = false;
box4.setEnabled(false);
}
}
else {
}
if (willRerollDiceFive) {
if (canRerollDiceFive) {
diceFive = 0;
rollDiceFive();
canRerollDiceFive = false;
box5.setEnabled(false);
}
}
else {
}
box1.setSelected(false);
box2.setSelected(false);
box3.setSelected(false);
box4.setSelected(false);
box5.setSelected(false);
f.validate();
f.repaint();
break;
default:
System.out.println("Error...");
}
答案 0 :(得分:4)
在actionPerformed
方法中,只需执行以下操作:
public void actionPerformed(ActionEvent e) {
if(e.getSource() == textYes){
//perform action when textYes clicked
}
if(e.getSource() == textNo){
//perform action when textNo clicked
}
}
而不是:
Scanner is = new Scanner(System.in);
System.out.println("Welcome to Greed...");
do {
System.out.println("Would you like to play? (yes/no)");
area = "menu";
menu = is.next();
switch (menu) {
case "yes":
jTextArea1.setText(null);
diceOne = 0;
diceTwo = 0;
diceThree = 0;
diceFour = 0;
diceFive = 0;
System.out.println("Rolling...");
Game();
break;
case "no":
System.out.println("Goodbye...");
System.exit(0);
break;
default:
invalidInput();
break;
}
} while (!"yes".equals(menu) || !"no".equals(menu));
area = "";
您可以创建一个将输入作为参数的方法。
public void start(String menu){
switch (menu) {
case "yes":
jTextArea1.setText(null);
diceOne = 0;
diceTwo = 0;
diceThree = 0;
diceFour = 0;
diceFive = 0;
System.out.println("Rolling...");
Game();
break;
case "no":
System.out.println("Goodbye...");
System.exit(0);
break;
default:
invalidInput();
break;
}
}
然后在执行的操作中,执行:
if(e.getSource() == textYes){
start("yes");
}
if(e.getSource() == textNo){
start("no");
}
答案 1 :(得分:4)
如何在actionPerformed中区分两个不同的JButton? 我有我的actionListeners
textYes.addActionListener(this);
textNo.addActionListener(this);
最干净的方法是使用单独的侦听器。您可以使用匿名内部类(如
)执行此操作textYes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// here you can do any necessary actions for the "Yes" button,
// like calling a specific method of the outer class which handles the event
}
});
textNo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// here you can do any necessary actions for the "No" button,
// like calling a specific method of the outer class which handles the event
}
});
如果您仍然只想使用一个动作侦听器,ActionEvent
中的getSource()
方法允许您访问事件的来源,如@ZouZou已经提到的那样。
答案 2 :(得分:1)
从ActionEvent,您可以获得action command。因此,只需set an action command每个按钮即可识别它们。
答案 3 :(得分:1)
getSource(),ActionEvent是(via java.awt.AWTEvent).
的子项。这为您提供了事件来自的对象的引用
或者使用setActionComman(String command)
为每个JButton设置命令,然后使用getActionCommand
获取相关操作命令。
String cmd = event.getActionCommand();
答案 4 :(得分:1)
为每个字段分配不同的ActionListener
。我强烈建议您这样做,不要扩展包含ActionListener
字段的Container,并将其作为this
传递。它保留了封装,它强制分离关注点,它是一个干净,易懂的代码。
因此,每个按钮都应添加ActionListener
,如下所示:
textYes.addActionListener(new ActionListener() {
@Override
public void actionPerformed(Action event e) {
//logic
}
});