java随机点名系统

这个Java程序创建了一个带有背景图片的GUI,用于实现随机点名功能。用户可以输入包含姓名的TXT文本路径,程序会从文件中读取姓名并随机选择。点名过程可以通过开始、暂停和确定按钮进行控制。程序还包含了读取文件、处理文本、显示姓名等核心功能。

import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
 
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
 
 
public class asd extends JFrame{
    private static final long serialVersionUID = 1L;
    JFrame jframe= new JFrame("窗体生成");
    JPanel jpanel=null;
    JPanel imagePanel = null;
    BufferedImage image= null;
    JLabel label3 = new JLabel();
    ImageIcon background = new ImageIcon();
    JTextArea jtext = new JTextArea();
    JButton jbutton1=new JButton("开始");
    JButton jbutton2=new JButton("暂停");
    JButton jbutton3=new JButton("确定");
    String strPath = "";
    public static boolean flag = true;//判断开始按钮是否被点过
    private static Thread t;
    private int count = 0;
    
    public asd(){  
        //添加背景图片
        try {
            image=ImageIO.read(new File("F:\\95.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        background = new ImageIcon(image);
        //把背景图片显示在一个标签里面
        JLabel label = new JLabel(background);
        //把标签的大小位置设置为图片刚好填充整个面板
        label.setBounds(0,0,450,400);
        //把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明       
        imagePanel = (JPanel)getContentPane();
        imagePanel.setOpaque(false);
        //把背景图片添加到分层窗格的最底层作为背景       
        getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
        
        //添加文字
        jpanel = (JPanel)this.getContentPane();//每次添加必须要加的语句
        JLabel label2 = new JLabel("请输入TXT文本路径:");
        Font font = new Font("",Font.BOLD,30);
        label2.setFont(font);
        label2.setForeground(Color.yellow);
        label2.setBounds(20,50,450,100);
        jpanel.add(label2);
        
        //添加按钮
        jpanel=(JPanel)this.getContentPane();  
        jpanel.setLayout(null);
        //(左,上,宽,高)
        jbutton3.setBounds(new Rectangle(330,180,60,20));
        jbutton3.addActionListener(new TextValue(this));
        jpanel.add(jbutton3);
        
        //添加文本框(左,上,宽,高)
        jtext.setBounds(40, 180, 260, 20);
        jpanel.add(jtext);
        
    }
    /**
     * 重写构造器
     */
    public asd(String str){  
        //将路径传入开始按钮
        strPath = str;
        
        //添加背景图片
        try {
            image=ImageIO.read(new File("F:\\图片\\95.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        background = new ImageIcon(image);
        //把背景图片显示在一个标签里面
        JLabel label = new JLabel(background);
        //把标签的大小位置设置为图片刚好填充整个面板
        label.setBounds(0,0,450,400);
        //把内容窗格转化为JPanel,否则不能用方法setOpaque()来使内容窗格透明       
        imagePanel = (JPanel)getContentPane();
        imagePanel.setOpaque(false);
        //把背景图片添加到分层窗格的最底层作为背景       
        getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
        
        //添加提示文字
        jpanel = (JPanel)this.getContentPane();//每次添加必须要加的语句
        JLabel label2 = new JLabel("点名开始啦!!!");
        Font font = new Font("",Font.BOLD,30);
        label2.setFont(font);
        label2.setForeground(Color.yellow);
        label2.setBounds(100,20,450,100);
        jpanel.add(label2);
        
        //显示名字信息
        label3.setBounds(150,120,450,100);
        //设置字体颜色
        label3.setForeground(Color.yellow);
        
        //添加按钮
        jpanel=(JPanel)this.getContentPane();  
        jpanel.setLayout(null);   
        jbutton1.setBounds(new Rectangle(100,300,75,25));  
        jpanel.add(jbutton1);  
        jbutton1.addActionListener(new Action(this));
        jbutton2.setBounds(new Rectangle(250,300,75,25));  
        jpanel.add(jbutton2);  
        jbutton2.addActionListener(new Stop(this));
        
    }
    
    /**
     * 从控制台输入路径
     */
    public static String InputPath(){
        String str ="";
        System.out.println("请输入TXT文本路径:");
        Scanner sc= new Scanner(System.in);
        str = sc.nextLine();
        return str;
    }

    /**
     * 读取文档数据
     * @param filePath
     * @return
     */
    public static String ReadFile(String filePath){
        String str = "";
        try {
        String encoding="GBK";
        File file = new File(filePath);
        if(file.isFile()&&file.exists()){
                InputStreamReader reader =
                    new InputStreamReader(new FileInputStream(file),encoding);
                BufferedReader bufferedReader = new BufferedReader(reader);
                String lineTxt = "";
                    while((lineTxt = bufferedReader.readLine()) != null){
                        str+=lineTxt+";\n";
                    }
                 reader.close();
            }else{
                System.out.println("找不到指定的文件");
            }
        }catch (Exception e) {
            System.out.println("读取文件内容出错");
            e.printStackTrace();
        }
        return str;
    }
    /**
     * 将字符串转换为String数组
     */
    public static String[] ChangeType(String str){
        ArrayList<String> list=new ArrayList<String>();
        String[] string = str.split(";");
        return string;
    }
    /**
     * main方法
     * @param args
     */
    public static void main(String args[]){
        asd jframe=new asd();
        jframe.setTitle("点名器");
        jframe.setSize(450,400);  
        jframe.setVisible(true);  
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.setResizable(false);
        jframe.setLocationRelativeTo(null);
        System.out.println();
    }
    /**
     * 点击确定按钮后的方法
     */
    public void chooseValue(ActionEvent e){
        String str = "";
        str = jtext.getText();
        if(str != "" || str != null){
        asd jframe = new asd(str);
        jframe.setTitle("点名器");
        jframe.setSize(450,400);  
        jframe.setVisible(true);  
        jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jframe.setResizable(false);
        jframe.setLocationRelativeTo(null);
        System.out.println(str);
        }
    }
    /**
     * 点击开始按钮后的方法
     */
    public void actionRun(ActionEvent e){
        if(flag){
        //线程开始
        t = new Thread(new Runnable(){
            public void run(){//
                while(count<=10000){
                    //文件路径
                    String strTest = strPath;
                    //开始读取数据
                    String strRead = ReadFile(strTest);
                    //将读取到的数据变为数组
                    String[] strc = ChangeType(strRead);
                    //获取随机的姓名
                    Random random = new Random();
                    int a = 0;
                    a = random.nextInt(strc.length-1);
                    String str = strc[a];
                    System.out.println("输出名字为:"+str);
                    label3.setFont(new java.awt.Font(str,1,60));
                    //设置名字标签的文字
                    label3.setText(str);
                    try{
                        t.sleep(20);//使线程休眠50毫秒
                    }catch(Exception e){
                    e.printStackTrace();
                    }
                    count+=1;//显示次数
                }
            }
        });
        t.start();
        //设置字体颜色
        jpanel.add(label3);
        flag = false;
        }
        flag = false;
    }
    /**
     * 点击暂停按钮后的方法
     */
    public void stopRun(ActionEvent e){
        if(!flag){
        t.stop();
        flag = true;
        }
        flag = true;
    }
}
 
/**
 *确定按键监控类
 */
class TextValue implements ActionListener {  
    private asd startJFrame;  
    TextValue(asd startJFrame) {  
        this.startJFrame = startJFrame;  
   }
    public void actionPerformed(ActionEvent e) {  
        startJFrame.chooseValue(e);
        startJFrame.setVisible(false);
    }
}
 
/**
 *开始按键监控类
 */
class Action implements ActionListener {  
    private asd jFrameIng;  
    Action(asd jFrameIng) {  
        this.jFrameIng = jFrameIng;  
   }  
    public void actionPerformed(ActionEvent e) {
        jFrameIng.actionRun(e);
        
    }
}
/**
 *暂停按键监控类
 */
class Stop implements ActionListener {  
    private asd jFrameIng;  
    Stop(asd jFrameIng) {  
        this.jFrameIng = jFrameIng;  
   }  
    public void actionPerformed(ActionEvent e) {
        jFrameIng.stopRun(e);
    } }

 

测试类

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class RandomName {

JFrame rFrame = new JFrame("随机点名器"); //主面板
JLabel name = new JLabel();
JButton btn = new JButton("开始点名");//按钮
Random rd = new Random();
public void init()
{
    JLabel jt = new JLabel("今天你很幸运:");//提示标签页面
    jt.setHorizontalAlignment(SwingConstants.CENTER);//设置标签居中
    jt.setFont(new java.awt.Font("随机点名器", 1, 35));//设置字体大小
    name.setHorizontalAlignment(SwingConstants.CENTER);//设置名字显示的标签居中
    btn.addActionListener(new ActionListener()
    {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            // TODO Auto-generated method stub
            String n = null;
            try {
                n = getRandomName();
            } catch (NumberFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }//获取随机的姓名
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
name.setText(n);//设置name标签的文字
name.setFont(new java.awt.Font(n,1,100));//设置字体
name.setForeground(Color.blue);
}

    });
    //获取JFrame的面板
    Container p = this.rFrame.getContentPane();
    //设置布局方式,我采用的BordepLayout布局
    p.setLayout(new BorderLayout(3,1));
    //添加提示标签在北方
    p.add(jt,BorderLayout.NORTH);
    //添加姓名标签在中央
    p.add(name,BorderLayout.CENTER);
    //添加按钮在南方
    p.add(btn,BorderLayout.SOUTH);
    //调整大小,这个是java中无法设置标签的大小
    rFrame.pack();
    //设置窗体大小
    rFrame.setSize(500, 500);
    //设置可以显示
    rFrame.setVisible(true);    
    
}
public String getRandomName() throws IOException
{
    //文件所在路径
    String filePath="F:\\name.txt";
    //读取
    
    BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"GBK"));
    //创建动态字符串数组
    ArrayList<String> list = new ArrayList<String>();
    String line = null;
    //对读取文件的内容进行处理,这里只进行输出
    while ((line = br.readLine()) != null) {
        // 将读取到的字符串放到字符串数组中
        list.add(line);
        // 一行一行地输出
// System.out.println(line);
}
br.close();// 关闭文件
String[] mingdan = (String[]) list.toArray(new String[0]);

// System.out.println(“length:”+mingdan.length);
int R = (int)(Math.random()*mingdan.length);
// System.out.println(“这次的幸运儿是:”+mingdan[Random]);
return mingdan[R];
}

public static void main(String[] args)
{
    RandomName rn = new RandomName();
    rn.init();
}}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值