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

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

 

一、实现思路

码字有点麻烦,来张图

用java实现自定义随机数发生器_第1张图片

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

用java实现自定义随机数发生器_第2张图片

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

二、实现细节

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{
	//主界面
	 static	JFrame _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() {
			@Override
			public void actionPerformed(ActionEvent e) {
				try {
					test.condition();
				} catch (Exception e1) {
					// TODO 自动生成的 catch 块
					e1.printStackTrace();
				}
			}
		});
		
		//添加停止监听事件
		_stop.addActionListener(new ActionListener() {
			
			@Override
			public 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方法
	@Override
	public 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;
	@Override
	public 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回到3
		else if(o1==_setNull){
			jta3.setText(null);
			jta4.setText(null);
			jta5.setText(null);
			jta6.setText(null);
			jta7.setText(null);
			i=3;
			o1=_getOne;
			}
		}
	}

四、show
用java实现自定义随机数发生器_第3张图片用java实现自定义随机数发生器_第4张图片

 

用java实现自定义随机数发生器_第5张图片

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java)