java点名代码滚动_[Java动态随机点名器(通过读取文件获取姓名)分享

package SwingTest;

import java.awt.BorderLayout;

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.JLabel;

import java.awt.FlowLayout;

import javax.swing.BoxLayout;

import javax.swing.ComboBoxModel;

import javax.swing.DefaultComboBoxModel;

import javax.swing.JComboBox;

import java.awt.Component;

import javax.swing.JTextField;

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ItemEvent;

import java.awt.event.ItemListener;

import java.awt.event.ActionEvent;

import java.awt.Font;

import java.awt.Color;

import java.util.*;

import javax.swing.JRadioButton;

import java.awt.Toolkit;

public class SwingTest1 extends JFrame implements Runnable {

private JPanel contentPane;

//重复点名单选框

public JRadioButton rdbtnNewRadioButton;

//不重复点名单选框

public JRadioButton rdbtnNewRadioButton_1;

//显示姓名信息文本框

private static JTextField textField;

//线程运行标志

private static boolean flag=true;

public static SwingTest1 swingtest;

public static Thread thread;

/**

* 定义点名的班级成员

*/

public static Liststudents=new ArrayList();

//点名次数

public int number=0;

//动态获取students班级人数

private static int num=0;

//随机数,students集合下标

private static int index=-1;

//用于改变button的开始与停止点名

public static int buttonflag=1;

//获取最初的班级人数,用于后面判断点名结束

public static int beginnum=0;

//判断是否选中了重复点名单选框

public boolean rdbtnNewRadioButtonFlag=false;

//判断是否选中了不重复点名单选框

public boolean rdbtnNewRadioButton_1Flag=false;

//设置set集合,用于避免重复点名

public Set setindex=new HashSet();

public void run() {

// TODO 自动生成的方法存根

Random random=new Random();

//初次运行线程时获取人数

num=students.size();

while(flag) {

index=random.nextInt(num);

//不重复点名选中

if(rdbtnNewRadioButton_1Flag) {

//判断随机数是否在setindex集合中,不在则输出

if(!setindex.contains(index))

{

textField.setText(students.get(index).toString());

}

else {

//setindex集合有随机数,则重新产生随机数

while(flag) {

index=random.nextInt(num);

if(!setindex.contains(index))

{

textField.setText(students.get(index).toString());

break;

}

}

}

}

//重复点名单选框选中

if(rdbtnNewRadioButtonFlag) {

textField.setText(students.get(index).toString());

}

try {

Thread.sleep(100);

}catch(InterruptedException e){

e.printStackTrace();

}

}//每次点到名字的随机数加到集合中,用于当不重复点名时的判断

setindex.add(index);

/**

* Launch the application.

*/

}

public static void main(String[] args) {

swingtest=new SwingTest1();

thread=new Thread(swingtest);

}

/**

* Create the frame.

*/

public SwingTest1() {

setResizable(false);

setTitle("\u70B9\u540D\u56682.0");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setBounds(100, 100, 520, 408);

contentPane = new JPanel();

contentPane.setBackground(new Color(135, 206, 250));

contentPane.setForeground(Color.CYAN);

contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

setContentPane(contentPane);

contentPane.setLayout(null);

/**

* 选择班级标签

*/

JLabel lblNewLabel = new JLabel("\u9009\u62E9\u73ED\u7EA7\uFF1A");

lblNewLabel.setForeground(new Color(30, 144, 255));

lblNewLabel.setFont(new Font("楷体", Font.BOLD, 25));

lblNewLabel.setBounds(32, 13, 170, 52);

contentPane.add(lblNewLabel);

/**

* 班级选择下拉框

*/

JComboBox comboBox = new JComboBox();

comboBox.setFont(new Font("方正粗黑宋简体", Font.PLAIN, 18));

comboBox.setBounds(155, 25, 154, 35);

contentPane.add(comboBox);

/**

* 开始和停止标签

*/

JButton btnNewButton = new JButton("\u5F00\u59CB");

btnNewButton.setForeground(Color.BLACK);

btnNewButton.setFont(new Font("楷体", Font.PLAIN, 30));

btnNewButton.setBounds(32, 259, 170, 83);

contentPane.add(btnNewButton);

/**

* 显示姓名信息文本框

*/

textField = new JTextField();

textField.setEditable(false);

textField.setForeground(new Color(255, 0, 0));

textField.setFont(new Font("新宋体", Font.PLAIN, 22));

textField.setBounds(155, 122, 308, 35);

contentPane.add(textField);

textField.setColumns(10);

/**

* 总人数标签

*/

JLabel lblNewLabel_3 = new JLabel("");

lblNewLabel_3.setFont(new Font("华文楷体", Font.BOLD, 22));

lblNewLabel_3.setBounds(183, 73, 92, 36);

contentPane.add(lblNewLabel_3);

JLabel lblNewLabel_4 = new JLabel("\u603B \u4EBA \u6570\uFF1A");

lblNewLabel_4.setFont(new Font("宋体", Font.PLAIN, 25));

lblNewLabel_4.setBounds(42, 78, 146, 27);

contentPane.add(lblNewLabel_4);

/**

* 姓名信息标签

*/

JLabel lblNewLabel_1 = new JLabel("\u59D3\u540D\u4FE1\u606F\uFF1A");

lblNewLabel_1.setFont(new Font("幼圆", Font.PLAIN, 25));

lblNewLabel_1.setBounds(32, 119, 154, 40);

contentPane.add(lblNewLabel_1);

/**

* 点名次数标签

*/

JLabel label = new JLabel("\u70B9\u540D\u6B21\u6570\uFF1A");

label.setFont(new Font("幼圆", Font.PLAIN, 25));

label.setBounds(32, 184, 154, 40);

contentPane.add(label);

/**

* 点名计数标签

*/

JLabel lblNewLabel_2 = new JLabel("\u672A\u5F00\u59CB\u70B9\u540D");

lblNewLabel_2.setForeground(Color.RED);

lblNewLabel_2.setFont(new Font("华文行楷", Font.PLAIN, 22));

lblNewLabel_2.setBounds(191, 190, 297, 32);

contentPane.add(lblNewLabel_2);

/**

* 退出按键Button

*/

JButton btnNewButton_1 = new JButton("\u9000\u51FA");

btnNewButton_1.setFont(new Font("楷体", Font.PLAIN, 30));

btnNewButton_1.setBounds(282, 259, 170, 83);

contentPane.add(btnNewButton_1);

/**

* rdbtnNewRadioButton为重复点名单选框

*/

JRadioButton rdbtnNewRadioButton = new JRadioButton("\u91CD\u590D\u70B9\u540D");

rdbtnNewRadioButton.setBackground(new Color(135, 206, 250));

rdbtnNewRadioButton.setFont(new Font("宋体", Font.PLAIN, 20));

rdbtnNewRadioButton.setBounds(363, 36, 121, 23);

contentPane.add(rdbtnNewRadioButton);

/**

* rdbtnNewRadioButton_1为不重复点名单选框

*/

JRadioButton rdbtnNewRadioButton_1 = new JRadioButton("\u4E0D\u91CD\u590D\u70B9\u540D");

rdbtnNewRadioButton_1.setBackground(new Color(135, 206, 250));

rdbtnNewRadioButton_1.setFont(new Font("宋体", Font.PLAIN, 20));

rdbtnNewRadioButton_1.setBounds(363, 75, 139, 23);

contentPane.add(rdbtnNewRadioButton_1);

setVisible(true);

//获取总班级文本文件内容

Listls=test1.getClassName();

//声明一个字符串数组,用于显示下拉框信息

String[] classNames=new String[ls.size()];

//将集合ls转为数组

ls.toArray(classNames);

//给下拉框设置值

comboBox.setModel(new DefaultComboBoxModel(classNames));

//students默认获得下拉框第一个信息

students=test3.getClassName((String)comboBox.getSelectedItem());

//获取最初的班级人数,用于后面判断点名结束,默认获得下拉框第一个信息

beginnum=students.size();

//输出总人数

lblNewLabel_3.setText(beginnum+"人");

//重复点名单选框事件

rdbtnNewRadioButton.addItemListener(new ItemListener() {

@Override

public void itemStateChanged(ItemEvent arg0) {

// TODO 自动生成的方法存根

//如果重复单选框选中,则取消不重复点名单选框的选中

if(rdbtnNewRadioButton.isSelected()) {

rdbtnNewRadioButton_1.setSelected(false);

}

//点名按钮改为可用

btnNewButton.setEnabled(true);

}

});

//不重复点名单选框事件

rdbtnNewRadioButton_1.addItemListener(new ItemListener() {

@Override

public void itemStateChanged(ItemEvent arg0) {

// TODO 自动生成的方法存根

//如果不重复单选框选中,则取消重复点名单选框的选中

if(rdbtnNewRadioButton_1.isSelected()) {

rdbtnNewRadioButton.setSelected(false);

}

//点名按钮改为可用

btnNewButton.setEnabled(true);

}

});

//下拉框点击事件

comboBox.addItemListener(new ItemListener() {

@Override

public void itemStateChanged(ItemEvent e) {

//每点击一次下拉框就重新给setindex集合内容清除

setindex.clear();

//每点击一次下拉框就根据下拉框的班级名字重新给班级成员students赋值

students=test3.getClassName((String)comboBox.getSelectedItem());

//获取最初的班级人数,用于后面判断点名结束

beginnum=students.size();

//输出总人数

lblNewLabel_3.setText(beginnum+"人");

//文本框内容初始化

textField.setText("");

//每重新选择一次班级,点名计数归0

number=0;

//重新选择班级后,开始点名的button变为可用,并改变显示信息

btnNewButton.setEnabled(true);

lblNewLabel_2.setText("未开始点名");

btnNewButton.setText("开始");

}

});

//button开始点名事件

btnNewButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

//获取重复点名单选框和不重复点名单选框状态

rdbtnNewRadioButtonFlag=rdbtnNewRadioButton.isSelected();

rdbtnNewRadioButton_1Flag=rdbtnNewRadioButton_1.isSelected();

//两个点名方式单选框状态相等则说明未选择,不能开始点名

if(rdbtnNewRadioButtonFlag==rdbtnNewRadioButton_1Flag) {

textField.setText("未选择点名方式!");

//点名按钮禁用

btnNewButton.setEnabled(false);

}

else {

//如果点名次数number与获取最初的班级人数beginnum相等,并且不重复点名单选框选中,则结束当前点名,不相等则运行线程

if((beginnum<=number)&&(setindex.size()==beginnum)&&(rdbtnNewRadioButton_1Flag)) {

//点名button按键禁用

btnNewButton.setEnabled(false);

textField.setText("名字已点完!请重新选择班级!");

lblNewLabel_2.setText(" "+(String)comboBox.getSelectedItem()+"名字已点完,共点了"+number+"次");

}

else {//判断button的运行标志

if(buttonflag==1) {

//线程标志改为true

flag=true;

//改当前button文本信息为停止

btnNewButton.setText("停止");

//开启线程

new Thread(swingtest).start();

//将下拉框和两个单选框改为不可选择

comboBox.setEnabled(false);

rdbtnNewRadioButton.setEnabled(false);

rdbtnNewRadioButton_1.setEnabled(false);

}

//先把button运行标志值加一为2,再点击停止时加一为3,线程停止

buttonflag++;

if(buttonflag==3) {

//线程标志为false,停止

flag=false;

//停止一次,即点名一次

number++;

lblNewLabel_2.setText(" "+(String)comboBox.getSelectedItem()+"已点名"+number+"次");

//修改按钮文本信息

btnNewButton.setText("再点一次");

//将button运行标志改为1,下次点击运行线程

buttonflag=1;

//停止点名,可以改变下拉框信息和两个单选框

comboBox.setEnabled(true);

rdbtnNewRadioButton.setEnabled(true);

rdbtnNewRadioButton_1.setEnabled(true);

}

}

}

}

});

//button退出事件

btnNewButton_1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

//将flag设置为false,并退出程序

flag=false;

System.exit(0);

}

});

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值