java编写一个花名随机抽取器的实现示例

一.程序效果

还记得以前上课的时候,老师会用自己写的一个抽取器抽取同学回答问题,当时想着我也要做一个,假期没事干,自学了java,闲来无聊,我也写一个,但是写的没有老师好,哈哈,好了说一下思路,先把界面布置好,然后逐一实现每个按钮的功能,其实也没什么难的。

二.需要用到的包

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

三.代码

1.相关实例对象,所以对象均为全局对象

 private static JLabel jl= new JLabel("文件:");
 private static JTextField jt =new JTextField();
 private static JButton OpenButton =new JButton("选择文件");
 private static JTextField jt2 =new JTextField();//文本框 显示抽取名单
 private static JButton StartButton =new JButton("开始抽取");
 private static JLabel ClassjL= new JLabel("班级:");
 private static JTextField ClassjT =new JTextField();//显示班级
 private static JLabel NumjL= new JLabel("人数:");
 private static JTextField NumjT =new JTextField();//显示人数
 private static JLabel jl2= new JLabel("抽取模式:");
 private static JComboBox jc= new JComboBox();//下拉列表框
 private static JButton AboutButton =new JButton("关于");
 private static JOptionPane jo =new JOptionPane();//弹出一个提示框
 private static String[]s ;//用来存放人名
 private static Font font = new Font("宋体",Font.BOLD,18); //设置字体对象
 private static int Number=0;//用来存放抽取人数

2.建立窗体,并完成组件的初始化

 private void windows() {
   JFrame jf =new JFrame ("花狗抽取器 本人博客:fdogcsdn.com");
   jf.setIconImage(new ImageIcon("Icon.jpg").getImage());
   Container c=jf.getContentPane();
   c.setLayout(new GridLayout(4,2,10,10));
   OpenButton.setFocusPainted(false);
   StartButton.setFocusPainted(false);
   AboutButton.setFocusPainted(false);//去掉按钮文字旁边的虚线框
   JPanel jp1 =new JPanel();
   JPanel jp2 =new JPanel(new BorderLayout());
   JPanel jp3 =new JPanel();
   JPanel jp4 =new JPanel();//添加面板
   jt.setColumns(10);
   ClassjT.setColumns(6);
   NumjT.setColumns(4);
   jt2.setHorizontalAlignment(JTextField.CENTER);
   jc.addItem("--请选择--");
   jc.addItem("抽取一人");
   jc.addItem("抽取三人");
   jc.addItem("抽取五人");
   jp1.add(jl);
   jp1.add(jt);
   jp1.add(OpenButton);
   jp2.add(jt2,BorderLayout.CENTER);
   jp3.add(ClassjL);
   jp3.add(ClassjT);
   jp3.add(NumjL);
   jp3.add(NumjT);
   jp3.add(jl2);
   jp3.add(jc);
   jp4.add(StartButton);
   jp4.add(AboutButton);
   c.add(jp1);
   c.add(jp2);
   c.add(jp3);
   c.add(jp4);
   jf.setVisible(true);
   jf.setBounds(800, 200, 400, 500);
   jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   getOpenButton(); //下面三个方法是用来监听按钮事件方法
   getAboutButton();
   getSrartButton();
  }

3.添加“打开文件”按钮监听事件:

  private void getOpenButton() {
   OpenButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
     JFileChooser fc =new JFileChooser();//这个对象就是我们点击打开文件,出来的文件选择器
     fc.setCurrentDirectory(new File("."));//指定当前默认目录
     fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);//可以选择只打开文件或者文件夹
     fc.setMultiSelectionEnabled(false);//是否允许多选文件
     int i =fc.showOpenDialog(getContentPane());
     if(i==JFileChooser.APPROVE_OPTION) {//判断是否打开
      File file =fc.getSelectedFile();
      //显示选中内容
      jt.setText(fc.getSelectedFile().getName());
      try{
      FileReader fr =new FileReader(file);
      BufferedReader in =new BufferedReader (fr);
      String line= in.readLine();//读取txt文件中的内容
      s =line.split(" ");//以空格为分隔符,存储人名
      NewMessage();  //监听事件
      getjcomboBox();//监听事件
      }catch(Exception e1) {
      e1.printStackTrace();
      }
     }
   }
   });
  }

4.“关于”按钮监听事件

  private void getAboutButton() {
   AboutButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    jo.showMessageDialog(null, "可建立txt文件:\n写入班级名字然后空格学生名字\n名字和名字之间必须要用空格隔开\n即可识别班级名称和人数以及名单");
   }
   });
  }

5.下拉列表框选择监听事件

 private void getjcomboBox() {
   jc.addItemListener(new ItemListener() {
   public void itemStateChanged(ItemEvent e) {
    if(e.getStateChange() == ItemEvent.SELECTED) {
    String itemSize = (String) e.getItem();
    if(itemSize=="抽取一人") {
     Number =1;
    }
    if(itemSize=="抽取三人") {
     Number =3;
    }
    if(itemSize=="抽取五人") {
     Number =5;
    }
    }
   }
   });
  }

6.“开始抽取”按钮监听事件

 private void getSrartButton() {
   StartButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    switch(Number) {
    case 1:
    int num1 =(int)1+(int)(Math.random()*(s.length-1-1));
    jt2.setText(s[num1]);
    break;
    case 3:
    int []num3=new int[100];
    for(int i=0;i<100;i++) {
     num3[i]=(int)1+(int)(Math.random()*(s.length-1-1));
    }
    for(int i=0;i<98;i++) {
     if(num3[i]!=num3[i+1] && num3[i]!=num3[i+2] && num3[i+1]!=num3[i+2]) {
       String strtext1= s[num3[i]]+" "+s[num3[i+1]]+" "+s[num3[i+2]];
       jt2.setText(strtext1);
     break;
     }
    }
    break;
    case 5:
    int []num5=new int[100];
    for(int i=0;i<100;i++) {
     num5[i]=(int)1+(int)(Math.random()*(s.length-1-1));
    }
    for(int i=0;i<95;i++) {
     if(num5[i]!=num5[i+1] && num5[i]!=num5[i+2] && num5[i]!=num5[i+3] && num5[i]!=num5[i+4]
     && num5[i+1]!=num5[i+2] && num5[i+1]!=num5[i+3] && num5[i+1]!=num5[i+4]
     &&num5[i+2]!=num5[i+3] && num5[i+2]!=num5[i+4]
     &&num5[i+3]!=num5[i+4]) {
       String strtext1= s[num5[i]]+" "+s[num5[i+1]]+" "+s[num5[i+2]]+" "+s[num5[i+3]]+" "+s[num5[i+4]];
       jt2.setText(strtext1);
     break;
     }
    }
    break;
    }
   }
   });
  }

7.如果成功打开文件并读取,文本框显示内容

 private void NewMessage() {
   ClassjT.setText(s[0]);
   String s1="";
   s1=""+(s.length-1);
   NumjT.setText(s1);
   jt2.setFont(font);
   jt2.setForeground(Color.blue);
   jt2.setText("已就绪,请开始抽取。");
  }

8.主方法

 public static void main(String[] args) {
 callmy call = new callmy();
 call.windows();
 }

9.资源下载

相关源代码

到此这篇关于java编写一个花名随机抽取器的实现示例的文章就介绍到这了,更多相关java 花名随机抽取器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java利用数组随机抽取幸运观众如何实现

    编写程序,事先将所有观众姓名输入数组,然后获得数组元素的总数量,最后在数组元素中随机抽取元素的下标,根据抽取的下标获得幸运观众的姓名. 思路如下: 定义输入框的按键事件,使用KeyEvent类的getKeyChar()函数判断其是否是回车字符,若不是则不作处理:使用isEmpty()函数判断文本框中是否有字符串,如果没有字符串则不做处理:若为合法输入则通过JTextArea类的append()方法把输入人名与回车符添加到人员列表:使用selectAll()方法选择文本框所有字符:定义点击"抽取&

  • java+sql2005 随机抽取试题的代码

    复制代码 代码如下: import java.awt.BorderLayout; import java.util.*; import java.awt.event.*; import java.awt.Container; import java.awt.EventQueue; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Stateme

  • java随机抽取指定范围内不重复的n个数

    一.JAVA中生成随机数的方式 1.在j2se中使用Math.random()令系统随机选取一个0~1之间的double类型小数,将其乘以一个数,比如25,就能得到一个0~25范围内的随机数,这个在j2me中没有: int randomNumber = (int) Math.round(Math.random()*(max-min)+min); 2.在System类中有一个currentTimeMillis()方法,这个方法返回从1970年1月1号0点0分0秒到目前的一个long型的毫秒数,可作

  • java实现随机抽取奖品工具类

    本文实例为大家分享了java实现随机抽取奖品工具类的具体代码,供大家参考,具体内容如下 随机抽取奖品 整体思路: 1.奖品集合 + 概率比例集合 2.将奖品按集合中的顺序概率计算成所占比例区间,放入比例集合.并产生一个随机数加入其中,进行排序. 3.排序后随机数落在那个区间就表示那个区间的奖品被抽中. 4.返回的随机数在集合中的索引,该索引就是奖品集合的中的索引. 5.比例区间的计算通过概率相加获得. //奖品的实体类 public class Gift { private String id;

  • java随机抽取指定范围不重复的数字

    本文给大家介绍如何在JAVA中实现随机无重复数字的功能.如果您是初学者的话,有必要看一看这篇文章,因为这个功能一般会在面试中遇到.包括我本人在招聘人员的时候也喜欢拿这个问题去问别人,主要看一看考虑问题的模式和基础知识如何. 希望这篇文章能给初次接触的朋友一些帮助,因为我曾接触过一些朋友要么写不出来,要么使用很平铺的思维方式去实现它. 一般有点开发经验的朋友都能实现这样的功能,只不过是效率上的问题.我们一般在面对这样的问题时,总会平铺直序的联想到,先生成一个数组,然后在一个循环中向数组中添加随机数

  • java利用数组随机抽取幸运观众

    本文实例为大家分享了java利用数组随机抽取幸运观众的具体代码,供大家参考,具体内容如下 思想: 首先将所有观众姓名生成数组,然后获取数组元素的总数量,再在数组元素中随机抽取元素的下标,根据元素的下标得到幸运观众的名字. import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.E

  • java编写一个花名随机抽取器的实现示例

    一.程序效果 还记得以前上课的时候,老师会用自己写的一个抽取器抽取同学回答问题,当时想着我也要做一个,假期没事干,自学了java,闲来无聊,我也写一个,但是写的没有老师好,哈哈,好了说一下思路,先把界面布置好,然后逐一实现每个按钮的功能,其实也没什么难的. 二.需要用到的包 import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.io.*; import java.util.*; 三.代码 1.相

  • 利用Java编写一个出敬业福的小程序

    目录 1.前言 2.定义工具类 3.生成"福"主类 4.运行测试 5.素材图片 1.前言 “福”的由来: 姜太公封一大批神仙时,却把自己的妻子叶氏封为穷神,还告诉她说:“有福的地方,你不能去.”从此,家家过年贴福字,就是告诉穷神,我这里是有福的地方,你千万不能进来.福字,就是摆脱穷困.追求幸福的象征. 福字之所以倒贴,传说起于清代恭亲王府.那年春节前夕,大管家按例写了几个斗大的“福”字,叫人贴于王府的大门上.有个家丁目不识丁,竟将“福”字头朝下贴上.恭亲王福晋十分气恼,欲鞭罚惩戒.可这

  • Python3使用TCP编写一个简易的文件下载器功能

    利用Python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造成文件错误或命令混乱.下面代码就是模拟客户端通过命令行操作服务器.客户端输入命令,服务器执行并且返回结果. TCP(Transmission Control Protocol 传输控制协议):是一种面向连接的.可靠的.基于字节流的传输层通信协议,由IETF的RFC 793定义. 使用TCP编写一个简易的文件下载器要求:需编写文件下载器服务端和文件下载器客户

  • 利用Java编写一个属于自己的日历

    目录 问题提出 一点提示 源码分享 问题提出 编写程序,输入年份,打印出该年的年历(12个月的),效果如下图所示. 一点提示 使用 Java 自带的 Calendar 类得到一个 Calendar 类对象,然后我们可以去得到每个月的第一天是星期几 Calendar 类不能直接 new 得到对象,需要使用 getInstance() 函数 //得到一个Calendar对象 Calendar c = Calendar.getInstance(); Calendar 类的 set 可以设置自己想要的日

  • 基于Java编写一个简单的风控组件

    目录 一.背景 1.为什么要做风控 2.为什么要自己写风控 3.其它要求 二.思路 1.风控规则的实现 2.调用方式的实现 三.具体实现 1.风控计数规则实现 2.注解的实现 四.测试一下 1.写法 2.Debug看看 一.背景 1.为什么要做风控 这不得拜产品大佬所赐 目前我们业务有使用到非常多的AI能力,如ocr识别.语音测评等,这些能力往往都比较费钱或者费资源,所以在产品层面也希望我们对用户的能力使用次数做一定的限制,因此风控是必须的! 2.为什么要自己写风控 那么多开源的风控组件,为什么

  • Java实现一个简单的文件上传案例示例代码

    Java实现一个简单的文件上传案例 实现流程: 1.客户端从硬盘读取文件数据到程序中 2.客户端输出流,写出文件到服务端 3.服务端输出流,读取文件数据到服务端中 4.输出流,写出文件数据到服务器硬盘中 下面上代码 上传单个文件 服务器端 package FileUpload; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.Serve

  • Java实现一个简单的长轮询的示例代码

    目录 分析一下长轮询的实现方式 长轮询与短轮询 配置中心长轮询设计 配置中心长轮询实现 客户端实现 服务端实现 分析一下长轮询的实现方式 现在各大中间件都使用了长轮询的数据交互方式,目前比较流行的例如Nacos的配置中心,RocketMQ Pull(拉模式)消息等,它们都是采用了长轮询方的式实现.就例如Nacos的配置中心,如何做到服务端感知配置变化实时推送给客户端的呢? 长轮询与短轮询 说到长轮询,肯定存在和它相对立的,我们暂且叫它短轮询吧,我们简单介绍一下短轮询: 短轮询也是拉模式.是指不管

  • Python编写一个优美的下载器

    本文实例为大家分享了Python编写下载器的具体代码,供大家参考,具体内容如下 #!/bin/python3 # author: lidawei # create: 2016-07-11 # version: 1.0 # 功能说明: # 从指定的URL将文件取回本地 ##################################################### import http.client import os import threading import time impo

  • 使用Java编写一个简单的Web的监控系统

    公司的服务器需要实时监控,而且当用户空间已经满了,操作失败,或者出现程序Exception的时候就需要实时提醒,便于网管和程序员调式,这样就把这个实时监控系统分为了两部分,   第一部分:实时系统监控(cpu利用率,cpu温度,总内存大小,已使用内存大小) 第二部分:实时告警 由于无刷新实时性,所以只能使用Ajax,这里没有用到任何ajax框架,因为调用比较简单 大家知道,由于java的先天不足,对底层系统的调用和操作一般用jni来完成,特别是cpu温度,你在window下是打死用命令行是得不到

  • 如何用java编写一个rmi

    RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方法调用的任何对象必须实现该远程接口. 调用这样一个对象时,其参数为 "marshalled" 并将其从本地虚拟机发送到远程虚拟机(该远程虚拟机的参数为 "unmarshalled")上.该方法终止时,将编组来自远程机的结果并将结果发送到调用方的虚拟机.如果方法调用导致抛出异常,则该

随机推荐