Swing+IO+Awt实现高级抽奖系统

目录

界面及基本组件部分

IO流保存id内容部分

显示效果

 新增知识

界面美化

添加菜单

操作系统进程

完整代码与图片内容


界面及基本组件部分

简易抽奖系统——java实现_无忧#的博客-CSDN博客

IO流保存id内容部分

中级抽奖——java实现(通过IO流保存中奖名单)_无忧#的博客-CSDN博客

显示效果

7cf40b7f35464fcda65487898d5e711d.gif

 新增知识

ImageIcon 图片路径
JMenuBar(JMenu,JMenuItem) 菜单控件
ProcessBuilder 操作系统进程

界面美化

主要知识,方法使用:ImageIcon,setIcon();

通过ImageIcon获取图片路径,通过setIcon()使标签设置成一张图片。

窗体背景美化:通过分层面板美化窗体背景,将一张图片作为窗体背景。

		    JLabel jl_bg = new JLabel(img); //背景
		    jl_bg.setBounds(0, 0, 500, 400); //设置位置和大小,必须setLayout(null)
		    getLayeredPane().add(jl_bg, new Integer(Integer.MIN_VALUE));//分层面板
		    ((JPanel)this.getContentPane()).setOpaque(false); //设置透明

按钮美化:给JButton设置一个图片。

ImageIcon img = new ImageIcon("src/bg.jpg");
JButton b1=new JButton(img);

添加菜单

  • JMenuBar负责创建菜单条,即JMenuBar的一个实例就是一个菜单条。
  • JMenu负责创建菜单,即JMenu的一个实例就是一个菜单。
  • JMenuItem负责创建菜单项,即JMenuItem的一个实例就是一个菜单项。

三者关系:菜单项放在菜单里,菜单放在菜单条里。

具体实现:

JMenuBar jmb=new JMenuBar();
JMenu gailv = new JMenu(""关于作者"");
JMenuItem jmi1=new JMenuItem("人帅气质佳");
JMenuItem jmi2=new JMenuItem("室外高人");
JMenuItem jmi3=new JMenuItem("努力学习Java");
jmb.add(about);
about.add(jmi1);
about.add(jmi2);
about.add(jmi3);

操作系统进程

在一些软件中,点击一个按钮或者一个选项会跳转到一个网址。

场景:在本例中要想获取id,必须去我的一个网站参加某个活动才能获取id,所以在点击获取id后,通过操作系统进程利用计算机自带的浏览器跳转到某个网址。

一般edge浏览器的位置在C:\\Program Files (x86)\\Microsoft\\Edge\\Application。

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5peg5b-nIw==,size_20,color_FFFFFF,t_70,g_se,x_16

1.跳转到自己写的html

try {
			    	ProcessBuilder pb=new ProcessBuilder("C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge_proxy.exe", 
			    			"D:\\机密\\前端\\html\\特效.html");
						pb.start();					
						} catch (IOException e1) {
					// TODO Auto-generated catch block
						e1.printStackTrace();
					}

2.跳转到百度

try {
			    	ProcessBuilder pb=new ProcessBuilder("C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge_proxy.exe", 
			    			"https://www.baidu.com/");
						pb.start();					
						} catch (IOException e1) {
					// TODO Auto-generated catch block
						e1.printStackTrace();
					}

完整代码与图片内容

为了方便复制并且直接测试功能,我将全部代码写在一个类里。

import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Frame extends JFrame{
	/**
	 * @author ZYY
	 */
	private static final long serialVersionUID = 1L;
	public List<String> list=new ArrayList<String>();
	public File f0=new File("d:/机密/文本文档");//创建一个文件对象,用于创建一个文件夹
	public File f1=new File("d:/机密/文本文档/id内容.txt");//创建一个文本文档
	public String prize[]= {"奖品","过期牛奶一箱","二手牙刷一个","小编秘制奥利给一份","雷碧一瓶","六个核弹一瓶",
			"半瓶开塞露","可日可乐一瓶","一袋旺仔牛逼糖","白事可乐一瓶","脑残酸菜牛肉面一袋"};//奖品信息
	
	FileInputStream fis;//字节流
	DataInputStream dis;//用数据流封装字节流,通过数据流读取数据
	@SuppressWarnings("removal")
	public Frame() {
		f0.mkdirs();//如果没有该文件夹,创建该目录的所有文件夹
		if(!f1.exists()) {//如果不存在该txt文档,创建该txt文档
			try {
				f1.createNewFile();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		try {//读取数据
			fis=new FileInputStream(f1);
			dis=new DataInputStream(fis);
			String str1;
			try {
				str1 = dis.readUTF();				
				String str2[]=str1.split(",");//通过","号还分割成字符串数组
				for(int i=0;i<str2.length;i++) {
						list.add(str2[i]);	//将数组内容赋值到list中	
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
			try {//关闭流,从下到上
				dis.close();
				fis.close();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//界面部分
		//setTitle("高级抽奖系统");
		
		 ImageIcon img = new ImageIcon("src/bg.jpg");
		 ImageIcon img1 = new ImageIcon("src/1.jpg");
		 ImageIcon img2 = new ImageIcon("src/2.jpg");
		 ImageIcon img3 = new ImageIcon("src/3.jpg");
		 ImageIcon img4 = new ImageIcon("src/4.jpg");
		 ImageIcon img5 = new ImageIcon("src/5.jpg");
		 ImageIcon img6 = new ImageIcon("src/6.jpg");
		 ImageIcon img7 = new ImageIcon("src/7.jpg");
		 ImageIcon img8 = new ImageIcon("src/8.jpg");
		 ImageIcon img9 = new ImageIcon("src/9.jpg");
		 ImageIcon img10 = new ImageIcon("src/10.jpg");
		 ImageIcon img11 = new ImageIcon("src/bs.jpg");
		 ImageIcon img12 = new ImageIcon("src/未中奖.jpg");
		 ImageIcon img13 = new ImageIcon("src/资格.jpg");
		 
		    JLabel jl_bg = new JLabel(img); //背景
		    jl_bg.setBounds(0, 0, 500, 400); //设置位置和大小,必须setLayout(null)
		    getLayeredPane().add(jl_bg, new Integer(Integer.MIN_VALUE));//分层面板
		    ((JPanel)this.getContentPane()).setOpaque(false); //设置透明
		        
		JLabel l1=new JLabel("高级抽奖系统");//标签组件
		JLabel l2=new JLabel("请输入您的id:");
		JLabel l3=new JLabel("");
		JLabel l4=new JLabel("查看奖品:");
		JLabel l5=new JLabel("");
		JLabel l6=new JLabel("往期中奖名单:");
		JLabel l7=new JLabel("");
		ImageIcon ani=new ImageIcon("src/cj.jpg");
		JButton b1=new JButton(ani);//按钮组件
		//JButton b2=new JButton("提示");
		JButton b3=new JButton("退出");
		JMenuBar jmb=new JMenuBar();
	    JMenu gailv = new JMenu("中奖概率");
	    JMenu about = new JMenu("关于作者");
	    JMenu getid = new JMenu("获取id");
	    JMenu rule = new JMenu("id抽奖规则");
	    JMenuItem jmi1=new JMenuItem("人帅气质佳");
	    JMenuItem jmi2=new JMenuItem("室外高人");
	    JMenuItem jmi3=new JMenuItem("努力学习Java");
	    JMenuItem jmi4=new JMenuItem("非vip=50%");
	    JMenuItem jmi5=new JMenuItem("vip=100%");
	    JMenuItem jmi6=new JMenuItem("小丑=0%");
	    JMenuItem jmi7=new JMenuItem("网页地址");
	    JMenuItem jmi8=new JMenuItem("id长度为6");
	    JMenuItem jmi9=new JMenuItem("v开头获得专属奖品");
	    JMenuItem jmi10=new JMenuItem("a开头有几率获得奖品");
	    JMenuItem jmi11	=new JMenuItem("其他格式不能参与");
	    about.add(jmi1);
	    about.add(jmi2);
	    about.add(jmi3);
	    gailv.add(jmi4);
	    gailv.add(jmi5);
	    gailv.add(jmi6);
	    getid.add(jmi7);
	    rule.add(jmi8);
	    rule.add(jmi9);
	    rule.add(jmi10);
	    rule.add(jmi11);
	    jmb.add(about);
	    jmb.add(gailv);
	    jmb.add(getid);
	    jmb.add(rule);
		JTextField jtf=new JTextField();//文本框组件
		JComboBox<Object> jcb=new JComboBox<Object>(prize);//下拉列表组件
		String ps[]=new String [list.size()+1];//下拉列表内容
		ps[0]="id";//给第一个命名
		for(int i=1;i<ps.length;i++) {
			ps[i]=list.get(i-1);//给剩下的命名
		}
		JComboBox<Object> cb=new JComboBox<Object>(ps);
		jtf.setColumns(20);//设置文本框内容长度
		l1.setBounds(150,20,300,50);//绝对坐标,大小
		l1.setFont(new Font("宋体",Font.BOLD,26));//样式
		l2.setBounds(10,340,110,30);
		l2.setFont(new Font("宋体",Font.BOLD,15));
		l3.setFont(new Font("黑体",Font.BOLD,20));
		l5.setFont(new Font("楷体",Font.BOLD,17));
		l3.setBounds(100,80,300,30);
		l4.setBounds(350,70,100,30);
		l5.setBounds(110,120,200,200);
		l6.setBounds(350,130,100,30);
		l7.setBounds(30,130,80,30);
		jtf.setBounds(130,340,120,30);
		b1.setBounds(260,340,90,30);
		b1.setFocusPainted(false);//去除焦点
		//b2.setBounds(435,320,70,30);
		b3.setBounds(365,340,70,30);
		jcb.setBounds(350,100,130,30);
		cb.setBounds(350,155,130,30);
		add(l1);//将组件加入到窗体里
		add(l2);
		add(l3);
		add(l4);
		add(l5);
		add(l6);
		add(l7);
		add(b1);
		//add(b2);
		add(b3);
		add(jtf);
		add(jcb);
		add(cb);
		setJMenuBar(jmb);
		setBounds(320, 200, 500, 400);//设置窗体的坐标大小
		setUndecorated(true);//是否消除窗体边框
		setLayout(null);//绝对布局
		
		setVisible(true);//是否显示
		jmi7.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				 try {
			    	ProcessBuilder pb=new ProcessBuilder("C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge_proxy.exe", 
			    			"https://www.baidu.com/");
						pb.start();					
						} catch (IOException e1) {
					// TODO Auto-generated catch block
						e1.printStackTrace();
					}
			}
		});
		b1.addActionListener(new ActionListener() {//添加监听
			@Override
			public void actionPerformed(ActionEvent e) {
				
				if(list.contains(jtf.getText())) {//判断是否存在该id
					l3.setText("该id已参与抽奖!");
					l3.setForeground(Color.RED);//前景色
				}else {
					if(jtf.getText().length()!=6) {
						l3.setText("id格式错误");
						l3.setForeground(Color.BLUE);
					}else {
						list.add(jtf.getText());
						l3.setText(jtf.getText()+"已成功参与抽奖!");
						l3.setForeground(Color.GREEN);
						Random r=new Random();//随机奖品
						int gl=r.nextInt(100);
						if(jtf.getText().charAt(0)=='v') {
							l7.setText("奖 品:");
							l7.setFont(new Font("黑体",Font.BOLD,20));
							//l5.setText("人品大爆发,您获得二手白丝一条");
							l5.setBorder(BorderFactory.createLineBorder(Color.RED));
							l5.setIcon(img11);						
						}else if(jtf.getText().charAt(0)=='a'){	
							if(gl>=20&&gl<=70) {//概率50%
								int num=r.nextInt(prize.length)+1;
								String p=prize[num];
								//l5.setText("恭喜您获得"+p);
								l7.setText("奖 品:");
								l7.setFont(new Font("黑体",Font.BOLD,20));
								if(num==1) l5.setIcon(img1);
								if(num==2) l5.setIcon(img2);
								if(num==3) l5.setIcon(img3);
								if(num==4) l5.setIcon(img4);
								if(num==5) l5.setIcon(img5);
								if(num==6) l5.setIcon(img6);
								if(num==7) l5.setIcon(img7);
								if(num==8) l5.setIcon(img8);
								if(num==9) l5.setIcon(img9);	
								if(num==10) l5.setIcon(img10);
								l5.setBorder(BorderFactory.createLineBorder(Color.RED));
							}else {
								//l5.setText("没有中奖");
								l5.setIcon(img12);	
							}
						}
						else {
							l5.setIcon(img13);	
							//l5.setText("但是没完全成功抽奖");
						}

					}
				}		
			}		
		});	
//		b2.addActionListener(new ActionListener() {
//
//			@Override
//			public void actionPerformed(ActionEvent e) {
//			    try {
//			    	ProcessBuilder pb=new ProcessBuilder("C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge_proxy.exe", "www.baidu.com");
//					pb.start();
//				} catch (IOException e1) {
//					// TODO Auto-generated catch block
//					e1.printStackTrace();
//				}
//			}
//			
//		});
		b3.addActionListener(new ActionListener() {//用于保存抽奖的id
			public void actionPerformed(ActionEvent e) {
				try {
					String str3=list.get(0);
					for(int i=1;i<list.size();i++) {
						str3+= (","+list.get(i));//将id保存
					}
					FileOutputStream fos=new FileOutputStream(f1);
					DataOutputStream dos=new DataOutputStream(fos);//通过数据流把数据保存到txt文档中
					try {
						dos.writeUTF(str3);
					} catch (IOException e1) {
						e1.printStackTrace();
					}
					try {
						dos.close();
						fos.close();
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}					
				} catch (FileNotFoundException e1) {					
					e1.printStackTrace();
				}
				System.exit(EXIT_ON_CLOSE);
			}
		});
	}
	
	
public static void main(String[] args) {
	new Frame();	//调用构造方法
}
	}

 有需要图片的我放到百度网盘上:

百度网盘链接提取码:zyy6

项目中图片存储位置:

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5peg5b-nIw==,size_13,color_FFFFFF,t_70,g_se,x_16

 小编制作不易,喜欢的话点点关注与收藏,有不明白的私信我即可。

猜你喜欢

转载自blog.csdn.net/weixin_52473454/article/details/121545391