【问题标题】:How do I hook up multiple buttons to change a single variable in an algorithm?如何连接多个按钮以更改算法中的单个变量?
【发布时间】:2013-11-26 22:17:38
【问题描述】:

我正在做一个“掷骰子”实验,因为我是一个全新的人,我似乎从中学到了很多东西。但是我被困在这个地方,似乎找不到任何帮助。

我连接了一个随机数生成器,我可以在其中编辑骰子的“边数”,用户手动输入这些数字。我希望用户能够按下我添加的按钮之一,并将计算出的随机结果显示在底部。我不知道如何做到这一点,所以我会很感激一些见解,即使它只是一行。

另外,如果我做错了什么,请告诉我,我真的很陌生,需要一些帮助!

这是我的代码:

import java.util.Scanner;
import java.awt.*;
    import java.awt.event.*;
import javax.swing.*;
import javax.swing.JButton;
import javax.swing.JFrame;
import java.applet.Applet;





public class randtest6t extends Applet
{ 


public static void main(String[] args)
{
int dieSides;
Scanner keyboard = new Scanner(System.in);
System.out.print("How many sides does the die need to be?");
dieSides = keyboard.nextInt();
int random = (int )(Math.random() * dieSides + 1);
System.out.println("You rolled a " + random + ".");



 //NAMING BUTTONS
 JButton button2 = new JButton("2");
 JButton button4 = new JButton("4");
 JButton button6 = new JButton("6");
 JButton button8 = new JButton("8");
 JButton button10 = new JButton("10");
 JButton button12 = new JButton("12");
 JButton button20 = new JButton("20");
 JButton button50 = new JButton("50");
 JButton button100 = new JButton("100");


 //LABELS
 JLabel sides = new JLabel("How many sides does the die need to be?");
 JLabel text = new JLabel("Your roll =");
 JLabel output = new JLabel("             " + random );

 output.setFont(new Font("Serif", Font.PLAIN, 56));
 text.setFont(new Font("Serif", Font.PLAIN, 20));
 sides.setFont(new Font("Serif", Font.PLAIN, 20));




 //NAMING PANELS
 JPanel buttonpanel = new JPanel(new GridLayout(3,3));
 JPanel outputpanel = new JPanel(new GridLayout(2,2));

 //CONNECTING BUTTONS/TEXT/PANELS
 outputpanel.add( text );
 outputpanel.add( output );

 buttonpanel.add( button2 );
 buttonpanel.add( button4 );
 buttonpanel.add( button6 );
 buttonpanel.add( button8 );
 buttonpanel.add( button10 );
 buttonpanel.add( button12 );
 buttonpanel.add( button20 );
 buttonpanel.add( button50 );
 buttonpanel.add( button100 );

 JFrame diceFrame = new JFrame("Dice Roll");

 diceFrame.add( sides, BorderLayout.NORTH );
 diceFrame.add( outputpanel, BorderLayout.SOUTH );
 diceFrame.add( buttonpanel, BorderLayout.CENTER );
 diceFrame.setSize(500,500);

 diceFrame.setVisible(true);
 diceFrame.addWindowListener(new WindowAdapter(){
   public void windowClosing(WindowEvent e){
     System.exit(0);
   }
 });
}
}

很抱歉,如果我的格式错误或其他任何问题,我将非常感谢您的帮助!

还要明确一点,我想要发生的事情是这样的:

  1. 按下按钮 2
  2. dieSides = 2
  3. int random = (int)(Math.random() * dieSides + 1);
  4. 在 JFrame 上显示结果

我遇到的问题是我不能让 dieSides 依赖于按下的按钮。

【问题讨论】:

  • 您可以让每个按钮调用一个将边数作为参数的方法。这样,每个按钮都可以调用相同的方法,但指定边数。
  • 您必须为每个按钮设置一个事件处理程序并重新分配输出值并刷新窗口以使其显示

标签: java button random numbers generator


【解决方案1】:

您的所有操作都发生在main() 方法中。您需要做的是将其中一些功能分离到您可以调用的其他方法中。例如,在main() 中,您可以设置所有按钮/面板、侦听器等,然后等待点击。看起来您的按钮上没有任何侦听器,您需要添加一个ActionListener(您实例化并传递给每个按钮的addActionListener(Listener) 方法的单独类或子类)。然后每个按钮应该调用像rollDie(int dieSides)这样的方法,其中x对于每个按钮都是唯一的,即button2应该调用rollDie(2);

这将使您的按钮正常工作。

最后,rollDie(int dieSides) 方法应该包含您对 Math.Random() 的调用。

现在您必须弄清楚如何使用生成的数字rollDie(int) 更新显示数字输出的面板。例如,rollDie(int) 可以将数字存储在类级变量中,并且每个按钮都可以调用另一个方法(如 updateOutputPanel())以使用新数字更新 JLabel

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 2021-05-14
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多