Java 从JTable获取每行值

Java 从JTable获取每行值,java,swing,jtable,Java,Swing,Jtable,我在JTable中显示数据库值,我想得到每一行的值。我尝试了addListSelectionListener,但是我得到了空指针异常,下面是我的源代码,哪里出了问题 public class mainFrame extends javax.swing.JFrame { static JTable table; static Connection connection; static Statement statement; static JTable jTable1; static int c

我在
JTable
中显示数据库值,我想得到每一行的值。我尝试了
addListSelectionListener
,但是我得到了空指针异常,下面是我的源代码,哪里出了问题

public class mainFrame extends javax.swing.JFrame {

static JTable table;
static Connection connection;
static Statement statement;
static JTable jTable1;
static int count;
static String r;
static DefaultTableModel model;

public mainFrame() {
    super();
    initComponents();
    setLocation(500, 180);
    try {
        //----------database
        final String queryCheck = "SELECT count(*) from test";
        final PreparedStatement ps = connection.prepareStatement(queryCheck);
        // ps.setString(1, name);
        final ResultSet resultSet = ps.executeQuery();
        if (resultSet.next()) {
            count = resultSet.getInt(1);
            System.out.println(count);

        }
        String read = "select * from test";
        ResultSet rs = statement.executeQuery(read);
        Object[][] data = new String[count][2];
        int i = 0;
        while (rs.next()) {

            for (int c = 0; c < 2; c++) {
                data[i][c] = rs.getString("namexcel");
            }
            i++;

        }
        String[] headers = {"Name"};           
        model = new DefaultTableModel(data, headers);
        jTable2.setModel(model);

        ListSelectionModel s = jTable2.getSelectionModel();
        s.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        s.addListSelectionListener(new RowListener(this));

        //     pack();
    } catch (Exception e) {

    }

}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {       //..
    pack();
}// </editor-fold>                        

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    try {
        String link = jTextField1.getText();
        System.out.println("" + link + "");
        jTextField1.setText("");
        File f = new File("" + link + "");
        if (!f.exists()) {
            JOptionPane.showMessageDialog(null, "File Doesnt Exist....!!");
            mainFrame frame = new mainFrame();
            frame.invalidate();
            frame.validate();
            //  frame.revalidate();
        } else {
            FileInputStream file = new FileInputStream(f);
            XSSFWorkbook workbook = new XSSFWorkbook(file);
            String name = workbook.getSheetName(0);
            System.out.println("----" + name);
            final String queryCheck = "SELECT count(*) from test WHERE namexcel = ?";
            final PreparedStatement ps = connection.prepareStatement(queryCheck);
            ps.setString(1, name);
            final ResultSet resultSet = ps.executeQuery();
            if (resultSet.next()) {
                final int count = resultSet.getInt(1);
                if (count == 0) {
                    JOptionPane.showMessageDialog(null, "thank you");

                    statement.executeUpdate("insert into test (namexcel) values('" + name + "')");
                    DefaultTableModel model = (DefaultTableModel) jTable2.getModel();
                    Vector newRow = new Vector();
                    newRow.add(name);
                    Object[][] data1 = {{name},};
                    model.addRow(newRow);

                } else {
                    JOptionPane.showMessageDialog(null, "Name Already exist please select diffrent name of excel");
                }
            }

        }

    } catch (Exception r) {

    }
}                                        


public static void main(String args[]) throws Exception {
    Class.forName("org.sqlite.JDBC");
    connection = null;
    connection = DriverManager.getConnection("jdbc:sqlite:excel.db");
    statement = connection.createStatement();
    statement.executeUpdate("CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY , namexcel string)");
}


private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
public static javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jTable2;
private javax.swing.JTextField jTextField1;                   

}



class RowListener implements ListSelectionListener {

mainFrame readRow;
JTable table;

public RowListener(mainFrame rar) {
    readRow = rar;
    table = readRow.table;
}

public void valueChanged(ListSelectionEvent e) {
    if (!e.getValueIsAdjusting()) {
        ListSelectionModel model = table.getSelectionModel();
        int lead = model.getLeadSelectionIndex();
        displayRowValues(lead);
    }
}

private void displayRowValues(int rowIndex) {
    int columns = table.getColumnCount();
    String s = "";
    for (int col = 0; col < columns; col++) {
        Object o = table.getValueAt(rowIndex, col);
        s += o.toString();
        if (col < columns - 1) {
            s += ", ";
        }
    }  
    System.out.println(s);
}
}
公共类大型机扩展了javax.swing.JFrame{
静态JTable表;
静态连接;
静态语句;
静态jTable1;
静态整数计数;
静态字符串r;
静态模型;
公共主机(){
超级();
初始化组件();
设定位置(500180);
试一试{
//----------数据库
最终字符串queryCheck=“从测试中选择计数(*)”;
最终准备的报表ps=连接。准备的报表(查询检查);
//ps.setString(1,名称);
最终结果集ResultSet=ps.executeQuery();
if(resultSet.next()){
count=resultSet.getInt(1);
系统输出打印项次(计数);
}
String read=“从测试中选择*”;
ResultSet rs=语句.executeQuery(读取);
对象[][]数据=新字符串[计数][2];
int i=0;
while(rs.next()){
对于(int c=0;c<2;c++){
数据[i][c]=rs.getString(“namexcel”);
}
i++;
}
字符串[]头={“名称”};
模型=新的DefaultTableModel(数据、标题);
jTable2.setModel(model);
ListSelectionModels=jTable2.getSelectionModel();
s、 设置选择模式(ListSelectionModel.单选);
s、 addListSelectionListener(新建行Listener(this));
//包装();
}捕获(例外e){
}
}
@抑制警告(“未选中”)
//                           
私有void initComponents(){/。。
包装();
}//                         
私有void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
试一试{
String link=jTextField1.getText();
System.out.println(“+link+”);
jTextField1.setText(“”);
文件f=新文件(“+link+”);
如果(!f.exists()){
showMessageDialog(null,“文件不存在…”!!”;
大型机框架=新的大型机();
frame.invalidate();
frame.validate();
//frame.revalidate();
}否则{
FileInputStream文件=新的FileInputStream(f);
XSSF工作簿=新XSSF工作簿(文件);
字符串名称=工作簿。getSheetName(0);
System.out.println(“---”+名称);
最终字符串queryCheck=“从测试中选择count(*),其中namexcel=?”;
最终准备的报表ps=连接。准备的报表(查询检查);
ps.setString(1,名称);
最终结果集ResultSet=ps.executeQuery();
if(resultSet.next()){
最终整数计数=resultSet.getInt(1);
如果(计数=0){
showMessageDialog(null,“谢谢”);
executeUpdate(“插入测试(namexcel)值(““+name+”)”);
DefaultTableModel=(DefaultTableModel)jTable2.getModel();
向量newRow=新向量();
newRow.add(名称);
对象[][]数据1={{name},};
model.addRow(newRow);
}否则{
JOptionPane.showMessageDialog(空,“名称已存在,请选择excel的不同名称”);
}
}
}
}捕获(异常r){
}
}                                        
公共静态void main(字符串args[])引发异常{
Class.forName(“org.sqlite.JDBC”);
连接=空;
connection=DriverManager.getConnection(“jdbc:sqlite:excel.db”);
statement=connection.createStatement();
语句.executeUpdate(“如果不存在则创建表测试(id INTEGER主键,namexcel字符串)”;
}
私有javax.swing.JButton jButton1;
私有javax.swing.JLabel jLabel1;
私有javax.swing.JPanel jPanel1;
公共静态javax.swing.JScrollPane-jScrollPane2;
私有javax.swing.JTable jTable2;
私有javax.swing.JTextField jTextField1;
}
类RowListener实现ListSelectionListener{
主机读取行;
JTable表;
公共行侦听器(大型机rar){
readRow=rar;
table=readRow.table;
}
public void值已更改(ListSelectionEvent e){
如果(!e.getValueIsAdjusting()){
ListSelectionModel=table.getSelectionModel();
int lead=model.getLeadSelectionIndex();
显示行值(lead);
}
}
私有void displayRowValues(int-rowIndex){
int columns=table.getColumnCount();
字符串s=“”;
for(int col=0;col
如果您的TableModel是DefaultTableModel,则可以使用getDataVector并查找所需的行

JTable table;
TableModel tModel=table.getModel();
int columnCount=tModel.getColumnCount();
int rowNumber;//you will have to know this
Object[] row=new Object[columnCount];
//Loop through the model and get the values by tModel.getValueAt(row,column);