最近找了一份教学生Java入门的‘差事’,刚刚讲了一些基础,为了引起大家学习兴趣,于是写了一个简单的点名器,awt因为很少涉及,所以找的网上的,分别写了List版本和数组版本,因为还没给学生讲解List,只学习数组,所以单独改造了一个数组版本的,因为考虑到通用型,采用读取任意位置的txt文本,只需要按照格式一行一行的写入学生就可以实现点名了,采用的Random实现伪随机。直接上代码,基本上都能看懂吧。

数组版本源码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

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

/**
 * 简易版本随机点名器-数组版本
 * 
 * @author lcry
 *
 */
public class RandomStudent1 {
    // 读取名单修改路径即可(txt文本文件,一行一个学生即可)
    public static String localurl = "H:\\class1.txt";

    // 程序入口
    public static void main(String[] args) {
        RandomStudent1 rn = new RandomStudent1();
        rn.init();
    }

    // 主面板
    JFrame rFrame = new JFrame("简易随机点名器--By:Lcry");
    // 名字
    String[] stuName = readclass(localurl);
    // 用于存储名字的标签
    JLabel name = new JLabel();
    // 按钮
    JButton btn = new JButton("随机点名");
    // 采用的是伪随机数,大家也可以不用这个,这个在网上可以找到java随机数的设置
    Random rd = new Random();

    public void init() {
        // 提示标签页面
        JLabel jt = new JLabel("随机点名器");
        // 设置标签居中
        jt.setHorizontalAlignment(SwingConstants.CENTER);
        // 设置字体大小
        jt.setFont(new Font("随机点名器", 1, 50));
        // 设置按钮大小
        btn.setPreferredSize(new Dimension(70, 39));
        // 设置名字显示的标签居中
        name.setHorizontalAlignment(SwingConstants.CENTER);
        // 通过匿名类实现Action按钮的监听事件
        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取随机的姓名
                String n = getRandomName();
                // 设置name标签的文字
                name.setText(n);
                // 设置字体
                name.setFont(new java.awt.Font(n, 1, 100));
                // 设置字体颜色
                name.setForeground(Color.red);
            }

        });
        // 获取JFrame的面板
        Container p = this.rFrame.getContentPane();
        // 设置布局方式,我采用的BorderLayout布局
        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() {
        int a = 0;
        // random类去实现随机数时,只能设置上限,也就是说随机数产生的都是0-stuName.length之间的数字
        a = rd.nextInt(stuName.length);
        System.out.println("随机数为:" + a + ",姓名为:" + stuName[a]);
        return stuName[a];
    }

    // 读取班级名单存放到数组中
    public static String[] readclass(String localfile) {
        // 读取文件
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(localfile));
        } catch (FileNotFoundException e) {

            e.printStackTrace();
        }
        // 直接写出读取容纳的学生人数:默认100
        String[] strs = new String[100];
        String line;
        int i = 0;
        try {
            while ((line = reader.readLine()) != null) {
                strs[i] = line;
                i++;
            }
        } catch (IOException e) {

            e.printStackTrace();
        }
        try {
            reader.close();
        } catch (IOException e) {

            e.printStackTrace();
        }
        int count = 0;
        for (String string : strs) {
            if (string != null) {
                count++;
            }
        }
        // 去掉空的才是最终的学生名单,采用copyOfRange方法
        String[] copyOfRange = Arrays.copyOfRange(strs, 0, count);
        return copyOfRange;
    }

}

List版本源码:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

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

/**
 * 简易版本随机点名器-List版本
 * @author lcry
 *
 */
public class RandomStudent2 {
    // 读取名单修改路径即可(txt文本文件,一行一个学生即可)
    public static String localurl = "H:\\class1.txt";

    // 程序入口
    public static void main(String[] args) throws Exception {
        RandomStudent2 rn = new RandomStudent2();
        rn.init();
    }

    // 主面板
    JFrame rFrame = new JFrame("简易随机点名器--By:Lcry");
    // 用于存储名字的标签
    JLabel name = new JLabel();
    // 按钮
    JButton btn = new JButton("点名");
    // 生成随机数
    Random rd = new Random();

    public void init() throws Exception {
        // 提示标签页面
        JLabel jt = new JLabel("随机点名器");
        // 设置标签居中
        jt.setHorizontalAlignment(SwingConstants.CENTER);
        // 设置字体大小
        jt.setFont(new Font("随机点名器", 1, 50));
        // 设置按钮大小
        btn.setPreferredSize(new Dimension(70, 39));
        // 设置名字显示的标签居中
        name.setHorizontalAlignment(SwingConstants.CENTER);
        // 通过匿名类实现Action按钮的监听事件
        btn.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // 获取随机的姓名
                String n;
                try {
                    n = getRandomName();
                    // 设置name标签的文字
                    name.setText(n);
                    // 设置字体
                    name.setFont(new Font(n, 1, 100));
                    // 设置字体颜色
                    name.setForeground(Color.red);
                } catch (Exception e1) {
                    e1.printStackTrace();
                }

            }

        });
        // 获取JFrame的面板
        Container p = this.rFrame.getContentPane();
        // 设置布局方式,我采用的BorderLayout布局
        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 Exception {

        List readclass = readclass(localurl);
        int nextInt = rd.nextInt(readclass.size());
        System.out.println("随机数为:" + nextInt + ",姓名为:" + readclass.get(nextInt));
        String reString = (String) readclass.get(nextInt);
        return reString;

    }

    // 读取班级名单存放到list
    public static List readclass(String localfile) throws Exception {
        // 读取文件学生信息
        BufferedReader reader = new BufferedReader(new FileReader(localfile));
        List list = new ArrayList();
        String line;
        while ((line = reader.readLine()) != null) {
            list.add(line);
        }
        reader.close();
        return list;
    }

}

使用方法:

修改localurl为你名单.txt的路径,运行程序即可。
数组版本默认读取最大100个人,如果班级学生超过100人了自行修改数组readclass方法中的的数组长度即可。

运行截图:

Java 实现简易随机学生点名器(附源码)

文章目录