通過jdbc連接數據庫實現讀取學生花名冊進行隨機點名!
~jdbc連接mysql數據庫 || 注釋部分代碼可通過讀取.txt文檔實現顯示學生信息
~通過點擊開始按鈕實現界面中間標簽不斷更新學生信息,當按下停止時顯示唯一學生信息,並調用random對象函數實現隨機抽取數據庫學生信息
~界面功能簡單,主要實現事件監聽和線程實現與銷毀。


//Menu.java
package a1;
import javax.swing.JFrame;
public class Menu {
public static void main(String[] args) { //主程序
randoms n = new randoms();
FromEx f=new FromEx();
n.AListener(f);
n.setResizable(false);
n.setTitle("學號點名小程序");
n.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
n.setBounds(700, 200, 100, 200);
n.setSize(400, 300);
n.setVisible(true);
}
}
//randoms.java
package a1;
import java.awt.*;
import javax.swing.*;
import javax.swing.JFrame;
public class randoms extends JFrame{
JLabel num;//顯示標題
JButton start,stop; // 開始、停止按鈕
JLabel rs; //顯示結果
JPanel jp1,jp2;
ExListener listener;
static boolean isSotp = true; //判斷當前狀態
public randoms() {
init();
}
void init(){
num = new JLabel("<<玩的就是心跳>>");
num.setFont(new Font("黑體", 2, 40));
start = new JButton("開始");
stop = new JButton("停止");
rs = new JLabel("0");
jp1 = new JPanel();
jp2 = new JPanel();
this.add(num,BorderLayout.NORTH);
jp1.add(rs);
this.add(jp1,BorderLayout.CENTER);
FlowLayout layout = new FlowLayout();//面板布局
layout.setAlignment(FlowLayout.CENTER);
jp1.setLayout(layout);
jp2.setLayout(layout);
jp2.add(start);
jp2.add(stop);
rs.setFont(new Font("宋體", 1, 30));//設置結果樣式
rs.setForeground(Color.RED);
this.add(jp2,BorderLayout.SOUTH);
}
void AListener(ExListener listener){
this.listener=listener;
listener.set(start, stop, rs, isSotp);
start.addActionListener(listener); //添加監聽
stop.addActionListener(listener);//添加監聽
}
}
//Exlistener.java
package a1;
import java.awt.event.ActionListener;
import javax.swing.*;
public interface ExListener extends ActionListener{
public void set(JButton J1,JButton J2,JLabel rs,boolean isSotp);
}
//ExThead.java 線程的實現
package a1;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Random;
import java.util.Vector;
import javax.swing.*;
public class ExThread extends Thread{
private JLabel rs;
boolean isSotp;
int n;
String a="";
//ArrayList<String> array=new ArrayList<String>();
Vector vector=new Vector();
int getn;
/*ExThread(JLabel rs,int n,boolean a){
this.rs = rs;
this.n = n;
isSotp=a;
}*/
void setbool(boolean a){isSotp=a;};
void setint(int a){n=a;};
ExThread(JLabel rs) throws IOException{
this.rs = rs;
v(vector);
//m(array);
/* //注釋部分讀取.txt文檔獲取花名冊信息
BufferedReader m=new BufferedReader(new FileReader("a.txt"));
while ((a = m.readLine()) != null) {
array.add(a);
}
getn=array.size();*/
}
public void v(Vector a){
a=vector;
try{
Class.forName("com.mysql.jdbc.Driver");//加載 MySQL 驅動程序
//建立與數據庫的連接
String url = "jdbc:mysql://localhost:3306/conarry";
Connection cn = DriverManager.getConnection(url,"root","guoxiaotong");
Statement cmd = cn.createStatement();//創建 Statement 對象
System.out.println("123");
String sql="select * from student";
ResultSet r=cmd.executeQuery(sql);
while(r.next()){
String n1=r.getString(1);//獲取數據庫 第一行第一列
String n2=r.getString(2); //獲取數據庫 第一行第二列
String n3=n1+" "+n2; //連接學號和姓名
a.add(n3);
}
getn=a.size();
} catch (Exception e) {
e.printStackTrace();
}
}
/*public void m(ArrayList<String> array){
this.array=array;
try{
Class.forName("com.mysql.jdbc.Driver");//加載 MySQL 驅動程序
//建立與數據庫的連接
String url = "jdbc:mysql://localhost:3306/conarry";
Connection cn = DriverManager.getConnection(url,"root","guoxiaotong");
Statement cmd = cn.createStatement();//創建 Statement 對象
System.out.println("123");
String sql="select * from student";
ResultSet r=cmd.executeQuery(sql);
while(r.next()){
String n1=r.getString(1);
String n2=r.getString(2);
String n3=n1+" "+n2;
array.add(n3);
}
getn=array.size();
} catch (Exception e) {
e.printStackTrace();
}
}*/
@Override
public void run() {
while(isSotp){
try {
Thread.sleep(500);
rs.setText((String) vector.get(getnumber(getn)));
System.out.println("1232");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static int getnumber(int n){ //根據你輸入的總人數返回隨機在人數范圍內的一個學號
Random r = new Random();
int r1 = r.nextInt(n);
return r1;
}
}
//FromEx.java 事件監聽接口實現 重寫兩個方法
package a1;
import java.awt.event.ActionEvent;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class FromEx implements ExListener {
JButton start,stop;
JLabel rs;
static boolean isSotp;
ExThread t;
public void set(JButton J1,JButton J2,JLabel rs,boolean isSotp){
start=J1;
stop=J2;
this.rs=rs;
this.isSotp=isSotp;
try {
t= new ExThread(rs);
} catch (IOException e) {
// TODO 自動生成的 catch 塊
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent e){
Object o = e.getSource();//獲取觸發事件對象實現監聽映射。
if(o == start)
{
//String number = num.getText();
try {
t= new ExThread(rs);
} catch (IOException e1) {
// TODO 自動生成的 catch 塊
e1.printStackTrace();
}
try{
//int n = Integer.parseInt(number);
isSotp = true;
//t.setint(n);
t.setbool(isSotp);
t.start();
}catch(NumberFormatException e2){
System.err.println("格式錯誤");
}
}else if(o == stop){
isSotp = false;
t.setbool(isSotp);
t.start();
System.out.println("this is stop");
}
}
}
