ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java---抽奖小程序

2021-01-10 16:59:45  阅读:148  来源: 互联网

标签:抽奖 java name flag window --- add file new


实现一个Java抽奖程序

用到Java swing,thread线程,File文件操作,事件处理。

package GIFT;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.ArrayList;
import java.util.Random;

public class Window  implements ActionListener {

    JFrame window;
    JPanel jPanel1,jPanel2,jPanel3;//面板
    JLabel jLabel1,jLabel2,jLabel3,jLabel4;
    JTextField name,count;//文本框,用于显示名字,奖项人数
    JButton gift,openfile,savefile;//抽奖按钮和导入文件,保存文件
    JComboBox jComboBox;//一二三等奖选择

    boolean ifStart = true;
    ArrayList<String> arrayList = new ArrayList<>();  //定义一个字符串链表
    File file = new File("award.txt");     //中奖名单
    //判断文件是否存在
    public boolean isexist(File file)
    {
        boolean flag=false;
        if(!file.exists())
        {
            return flag;
        }
        else {
            flag=true;
            return flag;
        }
    }
    //如果文件存在,则删除文件重新创建文件
    public void create(boolean flag)
    {
        if(flag)
        {
            file.delete();
        }
        file=new File("award.txt");
    }

    //构造函数
    public Window()
    {
        //设置窗口参数
        window=new JFrame("抽奖");
        jPanel1=new JPanel();
        jPanel2=new JPanel();
        jPanel3=new JPanel();

        //面板1,用于显示抽奖过程名字以及抽奖按钮
        name=new JTextField(10);
        name.setPreferredSize(new Dimension(200,80));
        name.setEditable(false);//不可编辑
        name.setOpaque(true);  //边框
        jLabel1=new JLabel("名字");
        jLabel2=new JLabel("抽奖");
        gift=new JButton("抽奖");
        jPanel1.add(jLabel1);
        jPanel1.add(name);
        jPanel1.add(jLabel2);
        jPanel1.add(gift);

        //奖项选择
        jComboBox=new JComboBox();
        jComboBox.addItem("一等奖");
        jComboBox.addItem("二等奖");
        jComboBox.addItem("三等奖");
        jLabel3=new JLabel("奖项选择");
        jLabel4=new JLabel("人数设置");
        count=new JTextField(10);
        jPanel2.add(jLabel3);
        jPanel2.add(jComboBox);
        jPanel2.add(jLabel4);
        jPanel2.add(count);

        //导入导出文件
        openfile=new JButton("导入抽奖名单");
        savefile=new JButton("导出等奖名单");
        jPanel3.add(openfile);
        jPanel3.add(savefile);

        window.add(jPanel1);
        window.add(jPanel2);
        window.add(jPanel3);

        window.setLayout(new GridLayout(3,1));   //m行n列,布局
        window.setBounds(400,200,600,500);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setVisible(true);

        //添加监听
        gift.addActionListener(this);
        openfile.addActionListener(this);
        savefile.addActionListener(this);

        //创建一个新文件保存获奖的名单
        boolean flag=false;
        flag=isexist(file);//判断文件是否存在
        create(flag);//新建文件

    }


    public void actionPerformed(ActionEvent e){
        Object object = e.getSource();
        if(object == openfile){
            fileOpen();    //导入文件
        }
        if(object == gift){
            ifStart = true;     //标志开始
            new Thread(new Runnable() {
                @Override
                public void run() {
                    int time = 500;     //设置一个抽奖时长
                    int i = 30;       //设置一个开始sleep时长
                    int j = Integer.parseInt(count.getText());
                    while(j>0) {   //人数大于0
                        i = 25;
                        while (true) {
                            try {
                                if (!ifStart) {
                                    synchronized (this) {
                                        this.wait();
                                    }
                                }
                                Random random = new Random();
                                if (arrayList.size() == 0) {  //用于判断是否有名单在链表中
                                    break;
                                }
                                int rd = random.nextInt(arrayList.size());
                                name.setText(arrayList.get(rd));   //将随机产生的数当作链表的下标
                                if (i < time) {
                                    Thread.sleep(i);
                                    i += 25;
                                } else {
                                    break;
                                }
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }

                        //把文本框1的内容写进award.txt中
                        try {
                            String name1 = name.getText();
                            if (name1.trim().length() != 0 && arrayList.contains(name1)) {
                                String price = (String) jComboBox.getSelectedItem();   //获取当前数据项
                                FileWriter fileWriter = new FileWriter(file, true);
                                fileWriter.write(name1 + " " + price);
                                fileWriter.write("\r\n");
                                fileWriter.close();
                                Thread.sleep(2000);
                            }
                            arrayList.remove(name1);
                        } catch (IOException e3) {
                            System.out.println(e3);
                        }catch (InterruptedException e2){
                            e2.printStackTrace();
                        }
                        j--;
                    }
                }
            }).start();
        }
        if(object == savefile){    //显示award.txt中的内容,并创建一个窗口显示名单
            JFrame jFrame = new JFrame();
            JTextArea jTextArea = new JTextArea();
            jTextArea.setEditable(false);
            JScrollPane jScrollPane = new JScrollPane(jTextArea);
            jFrame.add(jScrollPane,BorderLayout.CENTER);
            jFrame.setTitle("中奖名单");
            jFrame.setSize(300,350);
            jFrame.setVisible(true);
            jFrame.setLocation(250,200);
            try{
                FileReader inOne = new FileReader(file);
                BufferedReader inTwo = new BufferedReader(inOne);
                String s = null;
                while((s = inTwo.readLine())!=null){
                    s = s.trim();
                    jTextArea.append(s + '\n');
                }
            }catch (IOException e1){
                System.out.println(e1);
            }
        }
    }

    private void fileOpen(){

        JFileChooser jFileChooser = new JFileChooser(new File("C:"));
        FileNameExtensionFilter filter = new FileNameExtensionFilter("txt", "txt");
        jFileChooser.setFileFilter(filter);
        jFileChooser.setMultiSelectionEnabled(true);
        jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        jFileChooser.showDialog(jFileChooser,"确定");
        File[] file = jFileChooser.getSelectedFiles();

        for(File s:file){
            System.out.println(s);
        }
        //读取listname文件内进arrayList中
        try{
            FileReader inOne = new FileReader(file[0]);
            BufferedReader inTwo = new BufferedReader(inOne);
            String name = null;
            while((name = inTwo.readLine()) != null){
                name = name.trim();
                arrayList.add(name);
            }
        }catch (IOException e){
            System.out.println(e);
        }
    }
}
 public static void main(String []args)
    {
        Window window=new Window();
    }

标签:抽奖,java,name,flag,window,---,add,file,new
来源: https://blog.csdn.net/weixin_46471800/article/details/112432555

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有