我在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);
}
}

最佳答案

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);


如果您的TableModel是DefaultTableModel,则可以使用getDataVector并找到所需的行。

07-26 09:15