斷斷續續寫了三四天,看了很多代碼,查了很多資料,初步寫成,功能我覺得還不全,但還有一星期期末考了,沒時間寫了,先整理出來,以後再補充。
我寫了兩個思路的,第一個學生信息是在文本框內顯示的,因爲沒學過swing裏的表格,準確來說上課只講過awt。一系列操作都是現在本地的文本中實現,再導入到JTextArea,還能看,就是感覺有點奇怪。第二個版本自己看了一些簡單的JTable操作,是用表格顯示數據的,由於目前不懂數據庫,也不懂怎麼導入,就在網上找了導出數據到excel的方法。第一個版本功能有自動導入本地文本數據,添加,刪除(按名字刪除),查找。第二個只有添加,刪除(選中刪除),修改(直接表格上操作),排序(表頭點擊三次),導出excel。
第一個版本
package hhuc.InfoSystem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class InfoSystem {
public static void main(String[] args) {
new Init();
}
}
class Init {
private JFrame jf;
private JButton jb1;
private JLabel jl;
public Init() {
jf = new JFrame();
jf.setSize(250, 200);
jf.setLocationRelativeTo(null);// 居中
jf.setTitle("學生信息管理系統!");
jf.setLayout(null);// 無佈局管理器
// 標籤及按鈕
jl = new JLabel("歡迎來到學生信息管理系統");
jl.setBounds(20, 20, 250, 20);
jb1 = new JButton("進入系統");
jb1.setBounds(20, 60, 100, 50);
// 添加進窗體
jf.add(jl);
jf.add(jb1);
// 事件處理
Event();
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
;
}
public void Event() {
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
new Init2();
jf.dispose();//關閉窗體
}
});
}
}
class Init2 {
private JFrame jf2;
private JTextArea jtextArea;// 顯示信息的文本框
private JLabel lname, lid, lsex, lmajor;// 學生的姓名,學號,性別,專業
private JTextField tname, tid, tsex, tmajor, tfind;
private JButton add, delete, find;// 添加,刪除,查找
private File file;
public Init2() {
jf2 = new JFrame();
jf2.setSize(500, 800);
jf2.setLocationRelativeTo(null);
jf2.setTitle("學生信息管理系統!");
jf2.setLayout(null);
jf2.setResizable(false);// 窗口大小無法調節
// 設置每個插件的位置座標
jtextArea = new JTextArea();
jtextArea.setBounds(10, 10, 400, 400);
lname = new JLabel("姓名");
lname.setBounds(10, 450, 50, 20);
lid = new JLabel("學號");
lid.setBounds(10, 500, 50, 20);
lsex = new JLabel("性別");
lsex.setBounds(10, 550, 50, 20);
lmajor = new JLabel("專業");
lmajor.setBounds(10, 600, 50, 20);
tname = new JTextField(10);
tname.setBounds(60, 450, 100, 20);
tid = new JTextField(10);
tid.setBounds(60, 500, 100, 20);
tsex = new JTextField(10);
tsex.setBounds(60, 550, 100, 20);
tmajor = new JTextField(10);
tmajor.setBounds(60, 600, 100, 20);
tfind = new JTextField(10);
tfind.setBounds(10, 700, 100, 20);
add = new JButton("添加");
add.setBounds(10, 650, 70, 20);
delete = new JButton("刪除");
delete.setBounds(200, 650, 70, 20);
find = new JButton("查找");
find.setBounds(120, 700, 70, 20);
// 添加
jf2.add(add);
jf2.add(delete);
jf2.add(find);
jf2.add(jtextArea);
jf2.add(lid);
jf2.add(lmajor);
jf2.add(lname);
jf2.add(lsex);
jf2.add(tfind);
jf2.add(tid);
jf2.add(tmajor);
jf2.add(tname);
jf2.add(tsex);
// 事件處理
Event2();
// 可視,窗口可關
jf2.setVisible(true);
jf2.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
// 讀取文檔,第一次會新建
file = new File("f:\\管理系統學生信息.txt");
if (!file.exists()) {
try {// 文件不存在則創建文件,先創建目錄
File dir = new File(file.getParent());
dir.mkdirs();
file.createNewFile();
} catch (IOException e1) {
e1.printStackTrace();
}
}
try {
BufferedReader read = new BufferedReader(new FileReader(file));
String str = null;
while ((str = read.readLine()) != null) {
jtextArea.append(str + "\n");
}
read.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
public void Event2() {
add.addActionListener(new ActionListener() {//添加功能
@Override
public void actionPerformed(ActionEvent e) {
if (!jtextArea.getText().contains(tname.getText())) {//重複信息不會寫入
jtextArea.append(tname.getText() + "\t" + tid.getText() + "\t" + tsex.getText() + "\t"
+ tmajor.getText() + "\n");
output();//重新寫入數據
}else
System.out.println("該同學信息已經存在");
tname.setText("");
tid.setText("");
tsex.setText("");
tmajor.setText("");
}
});
delete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jtextArea.setText("");
//刪除此學生信息並重新讀取數據(文本里操作)
InputStreamReader read = null;
try {
read = new InputStreamReader(new FileInputStream(file));
} catch (FileNotFoundException e2) {
e2.printStackTrace();
}
BufferedReader bufferedReader = new BufferedReader(read);
String line = null;
try {
while ((line = bufferedReader.readLine()) != null) {
if (line.contains(tname.getText())) {
System.out.println("刪除了" + line);
line = line.replace(line, "");
}
jtextArea.append(line + "\n");
}
} catch (IOException e1) {
e1.printStackTrace();
}
//重新寫入數據
output();
tname.setText("");
tid.setText("");
tsex.setText("");
tmajor.setText("");
}
});
find.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jtextArea.setText("");
//選出符合條件數據並重新讀取
InputStreamReader read = null;
try {
read = new InputStreamReader(new FileInputStream(file));
} catch (FileNotFoundException e2) {
e2.printStackTrace();
}
BufferedReader bufferedReader = new BufferedReader(read);
String line = null;
try {
while ((line = bufferedReader.readLine()) != null) {
if (line.contains(tfind.getText())) {
jtextArea.append(line + "\n");
}
}
} catch (IOException e1) {
e1.printStackTrace();
}
tfind.setText("");
}
});
}
public void output() {//寫入文本數據
String str = jtextArea.getText();
try {
FileOutputStream out = new FileOutputStream(file);
byte[] Byte = str.getBytes();// 將字符串轉化成字節數組
out.write(Byte, 0, Byte.length);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
這個有點醜,可以忽略了
第二個版本
package hhuc.newInfoSystem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.RowSorter;
import javax.swing.WindowConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
public class NewInfoSystem {
private JFrame jf;
private JTable jtable;
// private TableModel model;//每次顯示數據都要new DefaultTableModel
// 定義二維數組作爲數據
Vector tableData = null;
// 定義一維數組作爲標題
Vector columnTitle = null;
// private JTextArea jtextArea;// 顯示信息的文本框
private JLabel lname, lid, lsex, lmajor;// 學生的姓名,學號,性別,專業
private JTextField tname, tid, tsex, tmajor;
private JButton add, delete, writeout;// 添加,刪除
public void init() {
tableData = new Vector();
columnTitle = new Vector();
columnTitle.addElement("姓名");
columnTitle.addElement("學號");
columnTitle.addElement("性別");
columnTitle.addElement("專業");
jf = new JFrame();
jf.setSize(500, 800);
jf.setLocationRelativeTo(null);
jf.setTitle("學生信息管理系統!");
jf.setLayout(null);
jf.setResizable(false);// 窗口大小無法調節
// 設置每個插件的位置座標
// jtextArea = new JTextArea();
// jtextArea.setBounds(10, 10, 400, 400);
// model = new DefaultTableModel(tableData, columnTitle);
jtable = new JTable(tableData, columnTitle);
JScrollPane js = new JScrollPane(jtable);// 有滾動條
js.setBounds(10, 10, 450, 400);
lname = new JLabel("姓名");
lname.setBounds(10, 450, 50, 20);
lid = new JLabel("學號");
lid.setBounds(10, 500, 50, 20);
lsex = new JLabel("性別");
lsex.setBounds(10, 550, 50, 20);
lmajor = new JLabel("專業");
lmajor.setBounds(10, 600, 50, 20);
tname = new JTextField(10);
tname.setBounds(60, 450, 100, 20);
tid = new JTextField(10);
tid.setBounds(60, 500, 100, 20);
tsex = new JTextField(10);
tsex.setBounds(60, 550, 100, 20);
tmajor = new JTextField(10);
tmajor.setBounds(60, 600, 100, 20);
// tfind = new JTextField(10);
// tfind.setBounds(10, 700, 100, 20);
add = new JButton("添加");
add.setBounds(10, 650, 70, 20);
delete = new JButton("刪除");
delete.setBounds(200, 650, 70, 20);
writeout = new JButton("導出");
writeout.setBounds(10, 700, 70, 20);
// find = new JButton("查找");
// find.setBounds(120, 700, 70, 20);
// 添加
jf.add(add);
jf.add(delete);
jf.add(writeout);
// jf.add(find);
// jf2.add(jtextArea);
jf.add(js);
jf.add(lid);
jf.add(lmajor);
jf.add(lname);
jf.add(lsex);
// jf.add(tfind);
jf.add(tid);
jf.add(tmajor);
jf.add(tname);
jf.add(tsex);
// 事件處理
Event();
// 可視,窗口可關
jf.setVisible(true);
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public void Event() {
//
jtable.getTableHeader().addMouseListener(new MouseListener() {
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
// int row = jtable.getSelectedRow();// 獲取表格中被選中的行
// TableRowSorter s = new TableRowSorter(jtable);
//排序包裝類,點擊表頭三次可排序,但是都按照字符串排序
if (e.getClickCount() == 3) {
DefaultTableModel tableModel = new DefaultTableModel(tableData, columnTitle);
RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(tableModel);
jtable.setRowSorter(sorter);
}
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
});
add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
add();
}
});
delete.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int row = jtable.getSelectedRow();// 獲取表格中被選中的行
tableData.removeElementAt(row);
DefaultTableModel tableModel = new DefaultTableModel(tableData, columnTitle);
jtable.setModel(tableModel);
JOptionPane.showMessageDialog(null, "刪除成功");
}
});
writeout.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try {
ExcelExporter exp = new ExcelExporter();
exp.exportTable(jtable, new File("results.xls"));
} catch (IOException ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
JOptionPane.showMessageDialog(null, "導出成功");
}
});
// find.addActionListener(new ActionListener() {
//
// @Override
// public void actionPerformed(ActionEvent e) {
// // TODO Auto-generated method stub
// Object[] arr = tableData.toArray();
//
// for (int i = 0; i < arr.length; i++) {
//
// System.out.println(arr[i]);
// System.out.println(arr[i].toString());
//
//
// }
// }
//
// });
}
public void add() {
// System.out.println(jtable.getRowCount());//錯的
// tableData[jtable.getRowCount()][0] = tname.getText();
// tableData[jtable.getRowCount()][1] = tid.getText();
// tableData[jtable.getRowCount()][2] = tsex.getText();
// tableData[jtable.getRowCount()][3] = tmajor.getText();
Vector<String> ve = new Vector<String>();
ve.addElement(tname.getText());
ve.addElement(tid.getText());
ve.addElement(tsex.getText());
ve.addElement(tmajor.getText());
int row = jtable.getSelectedRow();
//添加時可以在選中行下一行插入,默認最後一行
if (row >= 0) {
tableData.insertElementAt(ve, row + 1);
} else {
tableData.addElement(ve);
}
// 用於顯示標題和數據
DefaultTableModel tableModel = new DefaultTableModel(tableData, columnTitle);
jtable.setModel(tableModel);
JOptionPane.showMessageDialog(null, "添加成功");
tname.setText("");
tid.setText("");
tsex.setText("");
tmajor.setText("");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new NewInfoSystem().init();
}
}
class ExcelExporter {//導出到excel文件
public ExcelExporter() { }
public void exportTable(JTable table, File file) throws IOException {
TableModel model = table.getModel();
FileWriter out = new FileWriter(file);
for(int i=0; i < model.getColumnCount(); i++) {
out.write(model.getColumnName(i) + "\t");
}
out.write("\n");
for(int i=0; i< model.getRowCount(); i++) {
for(int j=0; j < model.getColumnCount(); j++) {
out.write(model.getValueAt(i,j).toString()+"\t");
}
out.write("\n");
}
out.close();
System.out.println("write out to: " + file);
}
}