随机抽奖小程序_在线随机抽号小程序

随机抽奖小程序_在线随机抽号小程序本实例使用随机数字生成5位抽奖号码,并显示在窗体的5个文本框中。当用户单击"开始"按钮时,将启动一个线程对象为5个文本框生成随机数字。单击"抽奖"按钮时,线程对

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

本实例使用随机数字生成5位抽奖号码,并显示在窗体的5个文本框中。当用户单击”开始”按钮时,将启动一个线程对象为5个文本框生成随机数字。单击”抽奖”按钮时,线程对象停止运行,并且将准确的中奖号码显示在信息文本框中。

开发一个抽奖小工具的实例。

(1)自定义文本框组件,把5个生成随机数的文本框的公共属性抽象定义到该文本框。

package com.lzw;  
import java.awt.Font;  
import javax.swing.JTextField;  
import javax.swing.SwingConstants;  
//自定义的文本框组件  
public class NumField extends JTextField {  
    private static final Font numfont = new Font("", Font.BOLD, 48);//定义文本框使用的字体  
   public NumField() {  
        super();   //执行父类构造方法  
        setHorizontalAlignment(SwingConstants.CENTER);  //设置文本居中对齐  
        setFont(numfont);   //设置字体  
        setFocusable(false); //取消焦点  
    }  
} 

(2)编写抽奖窗体。

public class Lottery extends JFrame {  
    private JTextField infoField;       //抽奖号码确认文本框  
    private NumField[] numFields;        //随机号码文本框数组  
    private RandomNum randomThread=new RandomNum();  
    public static void main(String args[]) {  
        EventQueue.invokeLater(new Runnable() {  
            public void run() {  
                try {  
                    Lottery frame = new Lottery();  
            frame.setVisible(true);  
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        });  
    }  
     //创建窗体界面的构造方法  
    public Lottery() {  
        super();  
        final BorderLayout borderLayout_1 = new BorderLayout();  
        borderLayout_1.setVgap(10);  
        getContentPane().setLayout(borderLayout_1);   //设置布局管理器  
        setBounds(100, 100, 420, 256);  
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
        final JPanel contentPanel = new JPanel();   //创建中间的内容面板  
        final BorderLayout borderLayout = new BorderLayout();   
        borderLayout.setVgap(10);  
        borderLayout.setHgap(10);  
        contentPanel.setLayout(borderLayout);  //设置内容面板布局管理器  
        getContentPane().add(contentPanel);    //添加内容面板到窗体  
        final JPanel numPanel = new JPanel();  //创建显示随机数的面板  
        contentPanel.add(numPanel);            //添加随机数面板到内容面板  
        final GridLayout gridLayout = new GridLayout(1, 0);  
        gridLayout.setHgap(10);  
        numPanel.setLayout(gridLayout);    //设置随机数面板布局管理器  
        numFields = new NumField[5];      //创建随机数文本框数组  
        for(int i=0;i<numFields.length;i++){  //初始化随机数文本框  
            numFields[i]=new NumField();      //初始化数组元素  
            numPanel.add(numFields[i]);       //添加文本框到随机数面板  
        }  
        final JPanel infoPanel = new JPanel();  //创建显示抽奖号码的面板  
        infoPanel.setLayout(new BorderLayout());  //设置面板布局管理器  
        contentPanel.add(infoPanel, BorderLayout.SOUTH);  //添加面板到窗体  
        final JLabel label_1 = new JLabel();       //布局抽奖号码面板  
        label_1.setFont(new Font("", Font.BOLD, 20));  
        label_1.setText("随机抽奖的中将号码是:");  
        infoPanel.add(label_1, BorderLayout.WEST);  
        infoField = new JTextField();  
        infoPanel.add(infoField);  
        final JLabel logoLabel = new JLabel();  //布局LOGO标签  
        logoLabel.setFont(new Font("隶书",  Font.PLAIN, 72)); 
logoLabel.setHorizontalAlignment(SwingConstants.CENTER);  
        getContentPane().add(logoLabel,  BorderLayout.NORTH);  
        logoLabel.setText("随机抽奖");  
        final JPanel controlPanel = new JPanel(); //创建控制按钮面板  
        final FlowLayout flowLayout = new FlowLayout();  
        flowLayout.setHgap(25);  
        controlPanel.setLayout(flowLayout);  //设置面板布局  
        getContentPane().add(controlPanel,  BorderLayout.SOUTH);  //添加面板到窗体底部  
        final JButton startButton = new JButton();    //创建开始按钮  
        startButton.addActionListener(new ActionListener() {    //添加事件监听器  
            public void actionPerformed(final ActionEvent e) {  
            do_startButton_actionPerformed(e);  
            }  
        });  
        startButton.setText("开始");  
        controlPanel.add(startButton);        //添加按钮到面板  
        final JButton lotteryButton = new JButton();  //创建抽奖按钮  
        lotteryButton.addActionListener(new ActionListener() {      //添加事件监听器  
            public void actionPerformed(final ActionEvent e) {                    
            do_lotteryButton_actionPerformed(e);  
            }  
        });  
        lotteryButton.setText("抽奖");  
        controlPanel.add(lotteryButton);  
        final JButton exitButton = new JButton();                     //创建退出按钮  
        exitButton.addActionListener(new ActionListener() {          //添加事件监听器  
            public void actionPerformed(final ActionEvent e) {  
                  do_exitButton_actionPerformed(e);  
            }  
        });  
        exitButton.setText("退出");  
        controlPanel.add(exitButton);  
}  

     // 生成随机数字的内部线程类  
    class RandomNum extends Thread {  
        private boolean stop=false;      //线程状态变量  
        public void run() {  
            while (!stop) {  
                for (final NumField nf :  numFields) {  
                    try {  
            Thread.sleep(1);  
                    } catch (InterruptedException e) {  
                e.printStackTrace();  
                    }  
                    final int num =  (int) (Math.random() * 10);     //生成随机数  
                      
EventQueue.invokeLater(new Runnable() {  
           public void run() {  
            nf.setText(num + "");  
                        }  
                    });  
                }  
            }  
        }  

         //停止线程的方法  
             public void stopLottery() {  
            this.stop = true;  
        }  
    }  
     // 开始按钮的事件处理方法  
    protected void do_startButton_actionPerformed(final ActionEvent e) {  
        if(randomThread!=null)                    //如果存在上一个线程对象  
            randomThread.stopLottery();           //停止它  
        randomThread=new RandomNum();             //创建新的线程对象  
        randomThread.start();                     //启动线程  
}  

  
   //抽奖按钮的事件处理方法  
   
    protected void do_lotteryButton_actionPerformed(final ActionEvent e) {  
        if(randomThread!=null)              //如果存在线程对象  
            randomThread.stopLottery();     //停止它  
        try {  
            randomThread.join();            //等抽奖线程结束  
        } catch (InterruptedException e1) {  
            e1.printStackTrace();  
        }  
        EventQueue.invokeLater(new Runnable() {  //在事件队列中更新抽奖信息  
            public void run() {  
                String code = "";                //抽奖代码字符串  
                for (final NumField nf :  numFields) {    //遍历数字文本框  
                    code +=  nf.getText();                 //连接5个数字字符  
                }  
                infoField.setText(code);                  //更新抽奖信息文本框  
            }  
        });  
    }  
 
     // 退出按钮的事件处理方法  
 
 protected void do_exitButton_actionPerformed(final ActionEvent e) {  
        System.exit(0);                           //退出程序  
    }  
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167551.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 有什么优质的计算机专业书籍?操作系统、计算机网络、计算机组成、数据结构、数据库…..「建议收藏」

    有什么优质的计算机专业书籍?操作系统、计算机网络、计算机组成、数据结构、数据库…..「建议收藏」大家好,我是小林哥。平日里,大家都喊程序员加班多很辛苦,动不动就掉头发,但干的还是很香的,毕竟大多数公司钱还是给的很到位的,今年毕业应届生的我见到好多动不动就月薪20K~30K的,真让人两眼泪酸酸,当然这离不开他们大学期间的努力。讲真,没什么家庭背景的人,选择当程序员确实是比较好的选择了,原因有二:首先,当今互联网、AI人工智能、大数据等都是高速发展的行业,自然人才需求很多,薪资也相对其他传统行业高;第二,纯粹看你技术能力,只要自己愿意付出努力,技术能力肯定会慢慢提高上来,而且现在比起几十年

    2022年5月2日
    49
  • 开机提示:DISK BOOT FAILURE,INSERT SYSTEM DISK AND PRESS ENTER无法开机的解决办法「建议收藏」

    开机提示:DISK BOOT FAILURE,INSERT SYSTEM DISK AND PRESS ENTER无法开机的解决办法「建议收藏」现实是悲催的,本人在公司不仅写Java/Android程序,又要管理公司的电脑。有新员工进来把电脑换了个主板,一开机提示DISKBOOTFAILURE,INSERTSYSTEMDISKANDPRESSENTER,明显是:“没有识别到硬盘”,在开机的日志显示:MenmoryRunsatFlexMemoryModeDetectingIDEdrives……

    2022年7月13日
    39
  • Button.performclick()[通俗易懂]

    Button.performclick()[通俗易懂] (1)WinForm中,Button按钮有PerformClick()方法,可以模拟用户单击鼠标.即button.PerformClick()生成按钮的事件。相关网站为:http://msdn2.microsoft.com/zh-cn/library/system.windows.forms.button.performclick(VS.80).aspx(2)在一些事件处理程序中,比如Fo

    2022年6月17日
    25
  • 5种方式实现 Java 单例模式

    5种方式实现 Java 单例模式单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。是否多线程安全:是是否懒加载:否正如名字含义,饿汉需要直接创建实例。缺点:类加载就初始化,浪费内存优点:没有加锁,执行效率高。还是线程安全的实例。懒汉单例,在类初始化不会创建实例,只有被调用时

    2022年8月11日
    11
  • 九九乘法表java思路_编写九九乘法表

    九九乘法表java思路_编写九九乘法表右下角publicclassJiu{publicstaticvoidmain(String[]args){//行for(inti=1;i<10;i++){//空格for(intk=1;k<=9-i;k++){System.out.print(“\t\t”);}//列for(intj

    2025年5月29日
    3
  • 机器学习之集成学习

    1.什么是集成学习?如果你随机向几千个人询问一个复杂问题,然后汇总它们的答案。在许多情况下你会发现,这个汇总的回答比专家的答案还要好,这被称为集体智慧,同样,如果你聚合一组预测器的预测,得到的预测

    2021年12月30日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号