java實現點名器例項
阿新 • • 發佈:2019-02-19
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格式文件,姓名縱列排即可