目录
界面及基本组件部分
IO流保存id内容部分
中级抽奖——java实现(通过IO流保存中奖名单)_无忧#的博客-CSDN博客
显示效果
新增知识
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。
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
项目中图片存储位置:
小编制作不易,喜欢的话点点关注与收藏,有不明白的私信我即可。