您的位置:首页 > 编程语言 > Java开发

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