JAVA练习 对JTable的认识

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]=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)             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值