0

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

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

另外,请告诉我我是否做错了什么,我在这方面真的很陌生,可以使用一些帮助!

这是我的代码:

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. 死边 = 2
  3. int random = (int)(Math.random() * dieSides + 1);
  4. 在 JFrame 上显示结果

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

4

1 回答 1

0

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

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

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

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

于 2013-11-14T03:03:46.503 回答