目录

一 、设置背景

二、设置用户类别

三、设置默认用户

四、设置学生用户类别抽奖

五、设置老师用户类别抽奖

六、创建判断用户种类方法

七、主体代码

八、关于黑白名单设置

九、注意点

十、运行效果


一 、设置背景

package com.hubstc.lottery;
import java.awt.Graphics;
import java.awt.Image;import javax.swing.JPanel;public class BackgroundPanel extends JPanel{Image image;public BackgroundPanel(Image image){super();this.setOpaque(false);//是否透明this.setLayout(null);//添加组件布局,空布局更自由没有顺序,可以通过setBounds()设计this.image=image;}@Override//右键source找protected void paintComponent(Graphics g) {// TODO Auto-generated method stubif(image!=null){int width=this.getWidth();int height=this.getHeight();g.drawImage(image, 0, 0, width, height,this);}super.paintComponent(g);}}

二、设置用户类别

package com.hubstc.lottery;
public abstract class Person {protected String no;protected String name;//区分教师和学生用户类别,创造类型protected int type;//用final保证种类无法修改//区分学生和教师信息,没有具体信息就显示校名public static final int TYPE_DEFAULT=0;public static final int TYPE_STUDENT=1;public static final int TYPE_TEACHER=2; public Person(String no, String name, int type) {super();this.no = no;this.name = name;this.type = type;}public String getNo() {return no;}public void setNo(String no) {this.no = no;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getType() {return type;}public void setType(int type) {this.type = type;}public static int getTypeDefault() {return TYPE_DEFAULT;}public static int getTypeStudent() {return TYPE_STUDENT;}public static int getTypeTeacher() {return TYPE_TEACHER;}//用下面的方法获取信息,下面的方法将重写public abstract String getTitle();public abstract String getPicPath();public boolean isValid(){if(no==null||no.isEmpty()||name==null||name.isEmpty()){return false;    }return true;}public boolean equals(Person person){//当前对象是无效的或者当前比较的参数是无效的if(!this.isValid()|| !person.isValid()){return false;}//如果两个成员对应相等,说明相等返回trueif(no.equals(person.no) &&name.equals(person.name)){return true;}//如果上面都不满足就返回falsereturn false;}
}

三、设置默认用户

package com.hubstc.lottery;public class default01 extends Person{@Overridepublic String getPicPath() {// TODO Auto-generated method stubString path="/imgs/"+"logo.jpg";return path;}
//默认没有号码和姓名public default01() {super("","", Person.TYPE_DEFAULT);// TODO Auto-generated constructor stub}@Overridepublic String getTitle() {// 区别教师和老师的存在return "湖北科技职业学院";}}

四、设置学生用户类别抽奖

package com.hubstc.lottery;
//继承父类Person
public class Student01 extends Person{@Overridepublic String getPicPath() {// TODO Auto-generated method stubString path="/imgs/student/"+no+".jpg";return path;}
public Student01(String no, String name) {
super(no, name ,Person.TYPE_STUDENT);
// TODO Auto-generated constructor stub
}
//我们进行类的定义可以不用主方法
@Override
public String getTitle() {
String title="学号"+no+"姓名"+name;
return title;
}
}

五、设置老师用户类别抽奖

package com.hubstc.lottery;
public class teacher01 extends Person{@Overridepublic String getPicPath() {// TODO Auto-generated method stubString path="/imgs/teacher/"+no+".jpg";return path;}public teacher01(String no, String name) {super(no, name, Person.TYPE_TEACHER);// TODO Auto-generated constructor stub}public static void main(String[] args) {// TODO Auto-generated method stub}public String getTitle() {String title="工号"+no+"姓名"+name;return title;}}

六、创建判断用户种类方法

package com.hubstc.lottery;
public class PersonFactory {//写一个静态方法(公有方法)去调用public static Person getPerson(int type,String no,String name){Person person=null;//根据类型判断用户类型if(no==null||no.isEmpty()||name==null||name.isEmpty()){person=null;}else{if(type==Person.TYPE_STUDENT){person=new Student01(no,name);}else if(type==Person.TYPE_TEACHER){person=new teacher01(no,name);}}if(person==null){person=new default01();}return person;}}

七、主体代码


package com.hubstc.lottery;
import java.awt.Color;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;public class MainFrameApp extends JFrame implements Runnable{//给出下面这个mainFrameApp类的定义//ButtonGroup 对单选项进行归组private ButtonGroup group=new ButtonGroup();//添加按钮private JRadioButton rbStu=new JRadioButton("学生");private JRadioButton rbTeacher=new JRadioButton("教师");private JButton btnStart=new JButton("开始抽奖");private JButton btnReset=new JButton("重置抽奖结果");//标签显示private JLabel picLabel=new JLabel("",JLabel.CENTER);//图片标签居中显示private JLabel titleLabel=new JLabel("",JLabel.CENTER);//文字标签居中显示private int type=Person.TYPE_STUDENT;private List<Person> persons;private List<Person> listBlack;private List<Person> listWhite;//控制循环开始执行private boolean flag;//开始写类的构造方法public MainFrameApp(){//开始设置窗口this.setTitle("随机抽奖系统");//设置标题栏this.setBounds(650,200,450,600);//排版this.setResizable(false);//是否允许重新设定窗口//添加图片 在项目用folder创建文件夹,找到文件夹路径把图片复制进去BackgroundPanel bp =new BackgroundPanel(Toolkit.getDefaultToolkit().getImage(MainFrameApp.class.getResource("/imgs/main.png")));//把中间容器设置到底层容器中this.setContentPane(bp);//添加开始按钮和重新抽奖按钮btnStart.setBounds(20,20,130,40);btnReset.setBounds(150, 20, 130, 40);//把按钮添加到背景面板中bp.add(btnStart);bp.add(btnReset);
//添加监视器                                                                                                                                                                                                                                                                                                                                                                                                               btnStart.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.out.println("开始抽奖");startRun();//合并到开始抽奖方法}});//添加监视器btnReset.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.out.println("重置抽奖结果");initialUI();initialData();}});group.add(rbStu);group.add(rbTeacher);rbStu.setBounds(320, 10, 100, 20);rbTeacher.setBounds(320, 35, 100, 20);bp.add(rbStu);bp.add(rbTeacher);rbStu.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.out.println("学生类别抽奖");type=Person.TYPE_STUDENT;initialData();}});rbTeacher.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubSystem.out.println("教师类别抽奖");type=Person.TYPE_TEACHER;initialData();}});picLabel.setBounds(90,85,250,300);titleLabel.setBounds(60, 380, 300, 50);Font font=new Font("隶书",Font.BOLD,24);//字体,字形,字号titleLabel.setFont(font); titleLabel.setForeground(Color.RED);bp.add(picLabel);bp.add(titleLabel);initialUI();initialData();}//对界面进行初始化getTitle picLabel //初始化数据//initialData
public void initialUI(){rbStu.setSelected(true);flag=true;Person person=PersonFactory.getPerson(Person.TYPE_DEFAULT, "", "");displayUI(person);
}private void displayUI(Person person){titleLabel.setText(person.getTitle());ImageIcon icon=new ImageIcon(Toolkit.getDefaultToolkit().getImage(MainFrameApp.class.getResource(person.getPicPath())));//显示各个用户自己的图片picLabel.setIcon(icon);
}private void initialData(){try{persons=FileInfoUtils.getFileInfo(type,FileInfoUtils.CONFIG_TYPE);//普通名单listWhite=FileInfoUtils.getFileInfo(type,FileInfoUtils.WHITE_TYPE);//黑名单listBlack=FileInfoUtils.getFileInfo(type,FileInfoUtils.BLACK_TYPE);//白名单}catch(Exception e){e.printStackTrace();}
}//四个按钮同时起作用,可用或者不可用
private void setBtnEnable(boolean falg){btnStart.setEnabled(falg);btnReset.setEnabled(falg);rbStu.setEnabled(falg);rbTeacher.setEnabled(falg);
}private void startRun(){setBtnEnable(false);Thread thread =new Thread (this);thread.start();//线程自动调用run方法
}@Override//重写run方法,实现循环遍历图片和学号public void run() {//displayUI(persons.get(i))int size=persons.size();//计数器,也就是滚动播放的次数int count=0;int currentId=0;Random rd=new Random();int rdm=rd.nextInt(size);while(flag)//取一遍集合中元素{//取的是第几个元素currentId=count%size;displayUI(persons.get(currentId));if(count==90+rdm)//循环次数{flag=false;}//设置越接近结果就越慢int time;if(count<40){time=30;}else if(count<100){time=100;}else{time=200;}try {Thread.sleep(30);//进程休息,让出使用权} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}count++;}doConfigure();//配置黑白名单,区分中奖用户类群flag=true;setBtnEnable(true);}private void doConfigure(){//有白名单,没有黑名单if(isValid(listWhite)&& !isValid(listBlack)){randomDisplay(listWhite);}//有黑名单,没有白名单,并且普通名单里面减去黑名单else if(isValid(listBlack)&& !isValid(listWhite)){//写一个方法实现普通名单里面删除黑名单List<Person> outBlackPerson=getPersonOutBlack();randomDisplay(outBlackPerson);}//黑名单和白名单都有else if(isValid(listBlack)&& isValid(listWhite)){if(isWhiteInBlack()){randomDisplay(listWhite);  }}}private boolean isWhiteInBlack(){for(int i=0;i<listWhite.size();i++){Person whitePerson=listWhite.get(i);//从白名单里面取出一个对象for(int j=0;j<listBlack.size();j++){Person blackPerson=listBlack.get(j);//从黑名单里面取出一个对象if(whitePerson.equals(blackPerson)){return true;}}}return false;}private List<Person> getPersonOutBlack(){List<Person> outBlackPersons=new ArrayList<>();for(int i=0;i<persons.size();i++)//persons是普通名单{Person person=persons.get(i);//普通名单里面取出一个对象for(int j=0;j<listBlack.size();j++){Person blackPerson=listBlack.get(j);//黑名单里面取出一个对象if(!person.equals(blackPerson)){outBlackPersons.add(person);}}}return outBlackPersons;}private void randomDisplay(List<Person> list){int size=list.size();Random rd=new Random();int rdm =rd.nextInt(size);displayUI(list.get(rdm));}private boolean isValid(List<Person> list){if(list==null||list.size()<1){return false;}for(int i=0;i<list.size();i++){Person person=list.get(i);if(person.isValid())//person is valid{return true;}}return false;}public static void main(String[] args) {//设置这种风格以后,学生教师按钮没有边框try {UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();
}MainFrameApp frame=new MainFrameApp();frame.setVisible(true);
}}

八、关于黑白名单设置

package com.hubstc.lottery;import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;//这个类写根据用户类型的不同读不同的文件
public class FileInfoUtils {//一个用户类型定义三个类型名单public static final int CONFIG_TYPE=0;//普通文件public static final int WHITE_TYPE=1;//白名单public static final int BLACK_TYPE=2;//黑名单public static List<Person> getFileInfo(int personType,int fileType) throws IOException{{String prefix="";//定义前缀String filePath="/res/";//根据用户类型判断,读文件的路径if(fileType==CONFIG_TYPE){}//没有前缀else if(fileType==WHITE_TYPE){prefix="white_";}else if(fileType==BLACK_TYPE){prefix="black_";}if(personType==Person.TYPE_STUDENT){filePath=filePath+prefix+"student.txt";}else if(personType==Person.TYPE_TEACHER){filePath=filePath+prefix+"teacher.txt";}URL url=FileInfoUtils.class.getResource(filePath);//获得路径File file=new File(url.getPath());List<Person> personList=new ArrayList<Person>();   FileReader fr=new FileReader(file);BufferedReader br=new BufferedReader(fr);//分行读取String line="";//创建相应的对象while((line=br.readLine())!=null){System.out.println(line);String[] flag=line.split(" ");if(flag==null || flag.length!=2){continue;//break是跳出本层循环}String no=flag[0];//System.out.println(flag[0]);String name=flag[1];//System.out.println(flag[1]);if(no==null||no.isEmpty()||name==null||name.isEmpty()){continue;}Person person=PersonFactory.getPerson(personType, no, name);personList.add(person);}br.close();fr.close();//PersonFactory.getPerson(int,String,String);getTitlereturn personList;}}  }

九、注意点

注意黑白名单,图片的设置路径。注意txt文件的编码方式需要另存为ANSI编码模式

十、运行效果

实现图片抽奖(可加入暗箱操作)全部代码,年会超实用!!!相关推荐

  1. android view存储为jpg,Android长按imageview把图片保存到本地的实例代码

    工具类 之前用 AsyncTask 现在改用rxJava public class SaveImageUtils { public static void imageSave(final ImageV ...

  2. python3图片转代码_python3图片转换二进制存入mysql示例代码

    python3图片转换二进制存入mysql示例代码 发布于 2014-09-29 18:00:01 | 198 次阅读 | 评论: 0 | 来源: 网友投递 Python编程语言Python 是一种面 ...

  3. java图片转换pdf_Java实现图片转换PDF文件的示例代码

    最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而对于只是转换一张图片的情况下,这些操作显然是非常繁琐的,所以作者就 ...

  4. Latex中将多个eps图片合并成一幅eps的代码和方法

    Latex中将多个eps图片合并成一幅eps的代码和方法 在SCI论文最后上传时,有时需要将多个eps小图合并成一幅eps图,这里讲一下完整的操作流程和相应代码,十分简单. STEP 1. 把下面代码 ...

  5. php根据图片地址获取图片原始高宽,Js获取图片原始宽高的实现代码

    如果我们页面看到的图片都是缩略图,那就需要做个图片点击放大效果,那么怎样获取图片的原始宽高呢?方法如下: //获取图片原始宽度 function getNaturalWidthAndHeight(im ...

  6. web前端学习基础教程,简单的图片旋转木马自动轮播js代码

    一款简单的图片旋转木马自动轮播js代码,图片叠加轮播切换效果,支持点击左右箭头按钮控制切换. 案例效果图 案例源码: <!DOCTYPE html> <html lang=" ...

  7. 淘宝/天猫/1688拍立淘API接口(以图搜商品API接口,图片搜索API接口,图片搜索商品API接口)代码对接教程

    淘宝/天猫/1688拍立淘API接口(以图搜商品API接口,图片搜索API接口,图片搜索商品API接口)代码对接教程如下: 1.公共参数 名称 类型 必须 描述(接口代码教程wx19970108018 ...

  8. android创建图片资源文件,Android图片添加水印图片并把图片保存到文件存储的实现代码...

    具体代码如下所示: package zhangphil.test; import android.graphics.Bitmap; import android.graphics.BitmapFact ...

  9. java抽奖_JAVA实现用户抽奖功能(附完整代码)

    需求分析 1)实现三个基本功能:登录.注册.抽奖. 2)登录:用户输入账号密码进行登录,输入账号后会匹配已注册的用户,若输入用户不存在则退出,密码有三次输入机会,登录成功后主界面会显示已登录用户的账号 ...

  10. 易语言 图片插入超级列表框_利用PPT制作一个图片抽奖

    上课时,为了参加互动的效果,抽奖是一个很好的方法,即能提高学生的学习兴趣也能活跃课堂气氛. 老师们大多使用的课件都是PPT,而PPT实现这种效果有点难度.百度中有介绍如何使幻灯片切换功能实现名字抽奖的 ...

最新文章

  1. 黎明觉醒火种测试服务器维护,黎明觉醒火种测试什么时候上线 黎明觉醒火种测试资格获取方式(图文)...
  2. 用C语言解“分段计算居民水费”题
  3. ZOJ1563 (动态规划)
  4. 微框架spark--api开发利器
  5. HttpURLConnection和HttpClient的简单用法
  6. python 降噪_使用降噪自动编码器重建损坏的数据(Python代码)
  7. ios 销毁当前页面重新开启_问:如何强制销毁iOS中的视图控制器?
  8. oracle 中的日志在处理,ORACLE在存储过程中记录日志的处理包
  9. Docker : Docker镜像的分层结构
  10. docker 与宿主共享文件
  11. mysql 复制_MySQL的复制功能
  12. sklearn中的损失函数
  13. 卷积层、池化层和全连接层 区别和作用
  14. 联想服务器win7系统安装教程,一键安装联想win7系统步骤指南
  15. 第一节计算机课开场白,老师第一节课的开场白
  16. .equal(String)与Stirng.equal()的区别
  17. 浏览器无法上网,其他软件可以
  18. 【论文精读】Deep Defocus Map Estimation using Domain Adaptation-2019CVPR
  19. Android sockot连接打印机EPSON ESC/POS指令打印
  20. ECC椭圆曲线算法(1)阿贝尔群

热门文章

  1. 什么是PSE认证,菱形和圆形的区别是什么
  2. 微信授权获取openID等信息,这里简化记录一下
  3. 《第十二周任务二》分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre
  4. 如何对待第一个女朋友--给初恋男生的爱情锦囊
  5. 金庸武功之“碧血剑法”----squid做透明代理
  6. 使用WPS将多张PPT压缩到一张PDF中打印
  7. 结肠癌个性化治疗新手段——基于类器官的Cas9筛选平台 | Cell Press 青促会述评...
  8. 乐橙机器人的价格_智能机器人多少钱 智能机器人报价【详解】
  9. 部分css实现垂直居中和靠右的方法
  10. Vue项目 npm i 报错npm ERR! code 1