Java 动态JTable-从所有行获取数据

Java 动态JTable-从所有行获取数据,java,dynamic,jtable,Java,Dynamic,Jtable,我在单击按钮时动态地向JTable添加行。 如何保存MySQL中所有行的数据?我可以保存所选行的数据,但我需要保存用户添加的所有行的数据。 我使用以下代码从行中获取值: pcon = model.getValueAt(selectedRowIndex,0).toString(); email = model.getValueAt(selectedRowIndex,3).toString(); mob = model.getValueAt(selectedRowIndex,4).toStri

我在单击按钮时动态地向JTable添加行。 如何保存MySQL中所有行的数据?我可以保存所选行的数据,但我需要保存用户添加的所有行的数据。 我使用以下代码从行中获取值:

 pcon = model.getValueAt(selectedRowIndex,0).toString();
 email = model.getValueAt(selectedRowIndex,3).toString();
 mob = model.getValueAt(selectedRowIndex,4).toString();
 tel = model.getValueAt(selectedRowIndex,5).toString();
 ext = model.getValueAt(selectedRowIndex,6).toString();
 posi = model.getValueAt(selectedRowIndex,1).toString();
 dep = model.getValueAt(selectedRowIndex,2).toString();

如何移动其他行?

您可以通过从DefaultTableModel扩展的自定义表模型和自己的数据对象来实现这一点

请参见下面的示例。标记“addedLater”可用于区分动态数据和初始数据

package test;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class JTabeGetRowsFromTable {

    static String []columnNames = {
        "Name",
        "Age",
        "Country"
    } ;
    Vector<Student> students = new Vector<Student> () ;

    Vector<Student> buildInitialData (){
        students.add(new Student("X", 18, "US")) ;
        students.add(new Student("Y", 19, "US")) ;
        students.add(new Student("Z", 20, "US")) ;

        return students ;
    }

    Student getNewStudent (){
        return new Student("A", 21, "Canada", true) ;
    }

    protected void buildAndGetTableData (){
        JTable table = new JTable () ;

        CustomTableModel ctm = new CustomTableModel(buildInitialData()) ;
        ctm.setColumnIdentifiers(columnNames);
        table.setModel (ctm) ;


        JFrame frame = new JFrame () ;
        frame.add(new JScrollPane(table), BorderLayout.CENTER) ;

        JButton btnAddRow = new JButton ("Add Row");
        btnAddRow.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                ctm.addARow(getNewStudent());
            }
        });
        frame.add(btnAddRow, BorderLayout.SOUTH);

        frame.setSize(500, 500);
        frame.setVisible(true);
    }

    private static class Student {
        String name;
        int age;
        String country ;
        boolean addedLater = false;

        public Student (String name, int age, String country){
            this(name, age, country, false) ;
        }

        public Student (String name, int age, String country, boolean addedLater){
            this.name = name ;
            this.age = age ;
            this.country = country ;
        }
    }



    private class CustomTableModel extends DefaultTableModel{

        /**
         * 
         */
        private static final long serialVersionUID = -8119518861817992201L;

        private Vector<Student> data ;

        public CustomTableModel (Vector<Student> data){
            this.data = data ;
        }

        @Override
        public Object getValueAt(int row, int column) {
            if (data != null && row < data.size()){
                Student student = (Student)data.get(row) ;
                switch (column){
                case 0:
                    return student.name ;
                case 1:
                    return student.age ;
                case 2:
                    return student.country;
                default:
                    return null ;

                }
            }

            return null ;
        }

        @Override
        public int getRowCount() {
            if (data != null){
                return data.size();
            }
            return 0 ;
        }

        public void addARow (Student student){
            data.add(student) ;
            fireTableDataChanged();
        }
    }

    public static void main (String args[]){
        JTabeGetRowsFromTable test = new JTabeGetRowsFromTable () ;
        test.buildAndGetTableData();
    }

}
封装测试;
导入java.awt.BorderLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.Vector;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
公共类JTabeGetRowsFromTable{
静态字符串[]列名称={
“姓名”,
“年龄”,
“国家”
} ;
向量学生=新向量();
向量buildInitialData(){
添加(新学生(“X”,18,“美国”);
添加(新学生(“Y”,19,“美国”);
添加(新学生(“Z”,20,“美国”);
留学生;
}
学生获取新闻学生(){
返回新学生(“A”,21,“加拿大”,真实);
}
受保护的void buildAndGetTableData(){
JTable table=新的JTable();
CustomTableModel ctm=新的CustomTableModel(buildInitialData());
ctm.setColumnIdentifiers(列名称);
表1.2.1.1.1.1.2.2.2.2.2.2.1.1.1.2.2.2.2.2.2.2.2.2.2.2.3.3.2.2;
JFrame=newjframe();
添加(新的JScrollPane(表),BorderLayout.CENTER);
JButton btnAddRow=新JButton(“添加行”);
btnAddRow.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
ctm.addARow(getNewStudent());
}
});
框架。添加(btnAddRow,BorderLayout.SOUTH);
框架。设置尺寸(500500);
frame.setVisible(true);
}
私立静态班学生{
字符串名;
智力年龄;
弦国;
布尔加法器=假;
公立学生(字符串名称、整数年龄、字符串国家){
这(姓名、年龄、国家、假);
}
公立学生(字符串名称、整数年龄、字符串国家/地区、布尔加法器){
this.name=名称;
这个。年龄=年龄;
这个国家=国家;
}
}
私有类CustomTableModel扩展了DefaultTableModel{
/**
* 
*/
私有静态最终长serialVersionUID=-8119518861817992201L;
专用矢量数据;
公共CustomTableModel(矢量数据){
这个数据=数据;
}
@凌驾
公共对象getValueAt(int行,int列){
if(data!=null&&row
我可以保存所选行的数据,
-为什么所有行的数据都不同?编写一个循环,每次获取一行的数据,然后更新数据库。