java - 从 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 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 并找到所需的行。

关于java - 从 JTable 获取每一行值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27309624/

相关文章:

java - 如何从android中的字符串数组中获取随机值?

java - 如何使用 InputStream 从 ZIP 中读取文件?

java - 编辑单元格值时以十进制格式显示数据

java - JTable计算最后一列的总和

java - Spring Data JPA无限递归

java - Spring Boot 在作为 Servlet 运行时可以连接到 Cassandra,但不能作为命令行运行

没有企业服务器的 Java 数据持久性?

java - GridBagLayout - 图表和标签的放置

java - 使用搜索词过滤 JTable 而不丢失背景颜色

java - 通过Jtable修改记录到数据库