用java实现自定义随机数发生器

来源:互联网 发布:2016淘宝小号购买平台 编辑:程序博客网 时间:2024/06/06 01:50

前几天参加一个抽奖送手机(p9)的活动,没有抽到,好心酸,当时人很多,所以用了抽取幸运号码的方式来抽奖,突然想挑战一下自己能不能做一个出来。


一、实现思路

码字有点麻烦,来张图

首先是界面,用到的都是Swing组件,有Jframe->Jpanel->JTextArea->JButton->JLabel等,具体的布局还有各个组件的属性可以凭自己喜好,我做的界面如下

口味有点重,谅解!!!!

二、实现细节

1、如何实现随机数滚动

看图,我们先把粉色框里的数取出来+1,作为产生随机数的范围,用一个整型数来得到一个随机数,作为蓝色文本框的内容,然后当点击开始的时候吗,用线程来控制

,比如每200个毫秒,就将蓝色框中的内容刷新一次,这样就让随机数滚动起来了。


那就涉及到线程的启动和停止了,线程启动很简单,start就行了,可停止呢,其实线程的停止与启动最好使用一个布尔型的Flag,当flag为真,让它启动,反之停止。

2.如何抓取滚动中的数并且可以抓五个

抓取很简单,直接用一个黄色文本框setText为蓝色文本框的值。但一个一个指定有点麻烦,所以这个地方我是这样实现的,用一个case语句,和一个局部变量i,比如第一次点击,设置完第一个文本框的Text,将i加1,那么下一次点击时就可以设置下一个框的值了。

清空:直接让五个文本框的值为NULL就可以了,让i回到初始值。

3.具体的点击事件在下边的代码。

三、代码实现

package classDemo;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.util.Random;import java.util.regex.Matcher;import java.util.regex.Pattern;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.SwingConstants;public class GetRandomNumber implements Runnable,ActionListener{//主界面 staticJFrame _randomNumber = new JFrame("random"); //主panel static JPanel _mainPanel = new JPanel(); //这个面板用来放置label和随机数范围输入框的 static JPanel _randPanel = new JPanel(); //随机数输入框 static JLabel _randLabel = new JLabel("请输入随机数范围:"); static JTextArea _numRange = new JTextArea(1,10);  //用来获取随机数的文本框 static JTextField _num = new JTextField(); static JTextArea jta3 = new JTextArea(1,3); static JTextArea jta4 = new JTextArea(1,3); static JTextArea jta5 = new JTextArea(1,3); static JTextArea jta6 = new JTextArea(1,3); static JTextArea jta7 = new JTextArea(1,3);  //五个功能按钮static JButton _start = new JButton("开始"); static JButton _stop = new JButton("停止");  static JButton _getOne = new JButton("抽取"); static JButton _setNull = new JButton("清空");  //用于线程启动与停止的flag static boolean boo = false;  //随机数种子 Random random = new Random();  int a; String s ;public static void main(String[] args) { final GetRandomNumber test = new GetRandomNumber();  //添加启动监听事件_start.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {test.condition();} catch (Exception e1) {// TODO 自动生成的 catch 块e1.printStackTrace();}}});//添加停止监听事件_stop.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根boo =true;}});//另外两个按钮的监听_getOne.addActionListener(test);_setNull.addActionListener(test);}//构造方法public GetRandomNumber(){//为了让界面美观一点的属性设置_randLabel.setFont(new Font(null, Font.BOLD, 20)); _randLabel.setForeground(Color.BLACK); _numRange.setBackground(Color.pink); _numRange.setFont(new Font(null, Font.BOLD, 20)); _num.setText("1");_num.setFont(new Font(null, Font.CENTER_BASELINE, 200));_num.setHorizontalAlignment(SwingConstants.CENTER);_num.setEditable(false);_num.setBackground(Color.BLUE);_num.setForeground(Color.GREEN);//字体设置jta3.setFont(new Font(null, Font.CENTER_BASELINE, 20));jta4.setFont(new Font(null, Font.CENTER_BASELINE, 20));jta5.setFont(new Font(null, Font.CENTER_BASELINE, 20));jta6.setFont(new Font(null, Font.CENTER_BASELINE, 20));jta7.setFont(new Font(null, Font.CENTER_BASELINE, 20));//前景色jta3.setForeground(Color.RED);jta4.setForeground(Color.RED);jta5.setForeground(Color.RED);jta6.setForeground(Color.RED);jta7.setForeground(Color.RED);//背景色jta3.setBackground(Color.ORANGE);jta4.setBackground(Color.ORANGE);jta5.setBackground(Color.ORANGE);jta6.setBackground(Color.ORANGE);jta7.setBackground(Color.ORANGE);//添加组件_randPanel.add(_randLabel);_randPanel.add(_numRange);_randomNumber.add(_randPanel,BorderLayout.NORTH);_randomNumber.add(_num);_mainPanel.add(_start);_mainPanel.add(_stop);_mainPanel.add(_getOne);_mainPanel.add(_setNull);_mainPanel.add(jta3);_mainPanel.add(jta4);_mainPanel.add(jta5);_mainPanel.add(jta6);_mainPanel.add(jta7);_randomNumber.add(_mainPanel,BorderLayout.SOUTH);//设置主面板的一些属性_randomNumber.setBounds(0,0,700,500);_randomNumber.setResizable(false);_randomNumber.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);_randomNumber.setVisible(true);}//取得自定义随机数的范围public int num(){//产生由1-a的随机数a= random.nextInt(Integer.valueOf(_numRange.getText()))+1;return a;}//线程的启动条件public void condition()throws Exception{if(!_num.getText().toString().equals(null)){boo = false;Thread t1 = new Thread(this);t1.start();}else{System.out.println("输入为空");throw new Exception("请输入数字范围");}}//重写的run方法@Overridepublic void run() {// TODO 自动生成的方法存根while(!boo){try {Thread.sleep(200);s = String.valueOf(num());_num.setText(s);} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();System.out.println("异常");}}}//i设置为三方便后边找输入框时方便int i=3;@Overridepublic void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根Object o1 = e.getSource();//每点击一次,相应输入框显示取得的数字if(o1==_getOne){switch(i){case 3:jta3.setText(_num.getText());break;case 4:jta4.setText(_num.getText());break;case 5:jta5.setText(_num.getText());break;case 6:jta6.setText(_num.getText());break;case 7:jta7.setText(_num.getText());break;}i=i+1;}//点击清空的时候,所有文本框设为NULL,i回到3else if(o1==_setNull){jta3.setText(null);jta4.setText(null);jta5.setText(null);jta6.setText(null);jta7.setText(null);i=3;o1=_getOne;}}}
四、show


现已打包为.exe,有需要的请到这里下载  链接:http://pan.baidu.com/s/1pKLyDtT 密码:6kis













0 0
原创粉丝点击