JAVA练习 对JTable的认识
2017-03-20 16:30
246 查看
public class Newhelper extends AbstractTableModel { JFrame frame; JScrollPane background; JTable table; student[] stud; int stum=0; JMenuItem save; JMenuItem load; JMenuItem add; JMenuItem dele; JMenuItem upload; JMenuItem download; helper help=new helper(); DefaultTableModel model; void inti() //界面初始化 { String[] coluname={"Class","No","Name","Math","Phys","Chem","Total","Avg "}; model=new DefaultTableModel(null,coluname){ //设置Total Avg不可编辑 /** * */ private static final long serialVersionUID = 302609117566487471L; public boolean isCellEditable(int rowIndex, int columnIndex) { if (columnIndex < 6) return true; else return false; } }; frame=new JFrame("学生信息管理"); //界面初始化 JMenu file=new JMenu("file"); JMenu edit=new JMenu("edit"); JMenu network=new JMenu("network"); JMenuBar bar=new JMenuBar(); save=new JMenuItem("save"); load=new JMenuItem("load"); add=new JMenuItem("add"); dele=new JMenuItem("delete"); upload=new JMenuItem("upload"); download=new JMenuItem("download"); file.add(save); file.add(load); edit.add(add); edit.add(dele); network.add(upload); network.add(download); bar.add(file); bar.add(edit); bar.add(network); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); add.addActionListener(new addlistener()); //监听注册 save.addActionListener(new savelistener()); dele.addActionListener(new delelistener()); load.addActionListener(new loadlistener()); upload.addActionListener(new uploadl()); download.addActionListener(new downloadl()); frame.setJMenuBar(bar); table=new JTable(model); background=new JScrollPane(); background.add(table); background.getViewport().add(table); frame.add(background); frame.setSize(600, 600); frame.setVisible(true); model.addTableModelListener(new tablething()); stud=new student[999]; //构造学生类数组 } @Override public int getColumnCount() { // TODO 自动生成的方法存根 return 0; } @Override public int getRowCount() { // TODO 自动生成的方法存根 return 0; } @Override public Object getValueAt(int rowIndex, int columnIndex) { // TODO 自动生成的方法存根 return null; } private class tablething implements TableModelListener{ //监听数据输入 @Override public void tableChanged(TableModelEvent e) { String[] stu=new String[6]; int x=e.getColumn(); int y=e.getLastRow(); if(e.getType()==TableModelEvent.UPDATE&&x==5) //当填满所有信息 则开始生成学生类 并计算出平均成绩与总分 { for(int i=0;i<6;i++) { stu[i]=(String) model.getValueAt(y, i); } stud[y]=new student(); change(stu,y); //字符串数据转化至类中 model.setValueAt(help.calaver(stud[y]), y, 7); model.setValueAt(help.calsum(stud[y]), y, 6); //计算平均分 总分 } // TODO 自动生成的方法存根 } } void change(String[] stu,int y) //字符串数据转化至学生类中 { stud[y].setbanji(stu[0]); stud[y].setname(stu[2]); stud[y].setnum(Integer.parseInt(stu[1])); stud[y].setmath(Float.parseFloat(stu[3])); stud[y].setwuli(Float.parseFloat(stu[4])); stud[y].sethuaxue(Float.parseFloat(stu[5])); System.out.println(stud[y].gethuaxue()); } class delelistener implements ActionListener{ //删除监听 可删除最下面一栏 @Override public void actionPerformed(ActionEvent arg0) { stud[model.getRowCount()-1 4000 ]=null; //model.get 把头标题也算入 model.removeRow(model.getRowCount()-1); // TODO 自动生成的方法存根 }} class addlistener implements ActionListener{ //增添的监听 可增加空的一栏 @Override public void actionPerformed(ActionEvent arg0) { // TODO 自动生成的方法存根 Vector n = null; model.addRow(n); }} class savelistener implements ActionListener{ //储存监听 可储存数据 @Override public void actionPerformed(ActionEvent e) { try { FileOutputStream stream=new FileOutputStream("information.ser"); ObjectOutputStream os=new ObjectOutputStream(stream); os.writeObject(stud); os.close(); } catch (FileNotFoundException e1) { // TODO 自动生成的 catch 块 e1.printStackTrace(); } // TODO 自动生成的方法存根 catch (IOException e1) { // TODO 自动生成的 catch 块 e1.printStackTrace(); } }} class loadlistener implements ActionListener{ //读取监听 可读取数据 @Override public void actionPerformed(ActionEvent arg0) { try { FileInputStream stream=new FileInputStream("information.ser"); ObjectInputStream os=new ObjectInputStream(stream); stud=(student[]) os.readObject(); loading(); //将学生信息输出到表格中 } catch (FileNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } // TODO 自动生成的方法存根 catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }} void loading() //将学生信息输出到表格中 {int lon=0; for(Object x:stud) { if(x!=null) {lon++;} //学生数据长度 else{break;} } System.out.println(lon); for(int i=0;i<lon;i++) { Vector v=new Vector(); v.add(stud[i].getbanji()); v.add(stud[i].getnum()); v.add(stud[i].getname()); v.add(stud[i].getmath()); v.add(stud[i].getwuli()); v.add(stud[i].gethuaxue()); v.add(help.calsum(stud[i])); v.add(help.calaver(stud[i])); model.addRow(v); } } class uploadl implements ActionListener //上传学生数据 { @Override public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 help.upload(stud); }} class downloadl implements ActionListener { @Override public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 stud=help.download(); //获取服务器中的学生数据 loading(); //将学生信息输出到表格中 }} }
DefaultTableModel model; String[] coluname={"Class","No","Name","Math","Phys","Chem","Total","Avg "}; //用DefaultTableModel来设置表头 model=new DefaultTableModel(null,coluname){ //设置Total Avg不可编辑 public boolean isCellEditable(int rowIndex, int columnIndex) { if (columnIndex < 6) return true; else return false; } }; //此处可设置表格中哪些位置可以编辑 table=new JTable(model);//创建新的表格
Vector n = null; model.addRow(n); //增加空的一栏表格
model.addTableModelListener(new tablething()); //监听表格数据的变化 private class tablething implements TableModelListener{ //监听数据输入 @Override public void tableChanged(TableModelEvent e) { String[] stu=new String[6]; int x=e.getColumn(); int y=e.getLastRow(); if(e.getType()==TableModelEvent.UPDATE&&x==5) //UPDATE即表格中数据数据更新 但表格数据更新且发生位置横轴位于5时 生成STUDENT对象 { for(int i=0;i<6;i++) { stu[i]=(String) model.getValueAt(y, i); } stud[y]=new student(); change(stu,y); //字符串数据转化至类中 model.setValueAt(help.calaver(stud[y]), y, 7); model.setValueAt(help.calsum(stud[y]), y, 6); //计算平均分 总分 } //表格的监听中DefaultTableModelk对象只有TableModel的监听 //而JTable则拥有许多监听
![JTable的监听](https://img-blog.csdn.net/20170320163131363?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTWFydGluV28=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
相关文章推荐
- java jtable mysql 练习与思考
- java练习 jtable增加删除
- 对java中JTable 和 .net中DataGrid的一点认识。
- Java gui练习 - JButton, JRadioButton,JMenuBar,JList,JComboBox,JScrollPane,JTable
- 数据结构与算法练习Java版练习1.4
- java 之jdbc认识(一)
- Java 基础-类 大厦的一层的认识
- 编码练习——Java-3-数组
- 从头认识java-4.1 创建与初始化对象
- (41)21.4.1 并发 练习 17---Java编程思想之并发笔记
- 从头认识java-2.3 自增自减与关系操作符
- java 学习笔记------画图函数的认识
- JAVA学习第三十课(常用对象API)- String类:类方法练习
- java--练习day01
- java Scanner练习
- JAVA笔记 JDBC初探和小练习
- 蓝桥杯练习-特殊回文数(JAVA)
- JAVA基础(一)------认识JAVA
- 从头认识java-4.5 对象的清理(finalize())
- java练习——客户信息(方法简单理解)