java实现点名器实例

package personal;

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 StartJFrame 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 StartJFrame(){  
    	//添加背景图片
    	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 StartJFrame(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[]){
		StartJFrame jframe=new StartJFrame();
		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){
    	StartJFrame jframe = new StartJFrame(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 StartJFrame startJFrame;  
    TextValue(StartJFrame startJFrame) {  
        this.startJFrame = startJFrame;  
   }
    public void actionPerformed(ActionEvent e) {  
    	startJFrame.chooseValue(e); 
    	startJFrame.setVisible(false);
    }
}

/**
 *开始按键监控类
 */
class Action implements ActionListener {  
    private StartJFrame jFrameIng;  
    Action(StartJFrame jFrameIng) {  
        this.jFrameIng = jFrameIng;  
   }  
	public void actionPerformed(ActionEvent e) {
		jFrameIng.actionRun(e);
		
	}
} 
/**
 *暂停按键监控类
 */
class Stop implements ActionListener {  
    private StartJFrame jFrameIng;  
    Stop(StartJFrame jFrameIng) {  
        this.jFrameIng = jFrameIng;  
   }  
	public void actionPerformed(ActionEvent e) {
		jFrameIng.stopRun(e);
    }  
}

输入姓名列表路径用txt格式文档,姓名纵列排即可


  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值