Java 实现简易随机学生点名器(附源码)
最近找了一份教学生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方法中的的数组长度即可。
运行截图:
商业转载请联系作者获得授权,非商业转载请注明本文出处及文章链接