访问矢量内的矢量在Java中

时间:2014-10-08 18:37:40

标签: java swing jtable defaulttablemodel

我已经从数据库中填充了一个jTable,现在我想添加更多的functiaonality,我想删除一行,我有这样的数据结构:

public Vector getUser()throws Exception {

Vector<Vector<String>> userVector = new Vector<Vector<String>>();

Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL,USER,PASS);
PreparedStatement pre = conn.prepareStatement("SELECT * FROM korisnici");
 rs = pre.executeQuery();


while (rs.next()) {
    Vector<String> user = new Vector<String>();
    user.add(rs.getString(1)); 
    user.add(rs.getString(2)); 
    user.add(rs.getString(3)); 
    user.add(rs.getString(4)); 
    userVector.add(user);
}

if (conn!=null)
    conn.close();

return userVector;
}

接下来我用这样的模型创建了一个jTable

jTable1.setModel(new javax.swing.table.DefaultTableModel(
        data,header
    ));

所以现在我想用

删除行
jTable1.remove(int);

我的数据库有7行,当我把int = 1时,我得到outOfBoundsException:1

我错了,对吧?如何正确删除行?

3 个答案:

答案 0 :(得分:2)

使用DefaultTableModel根据行号删除行。

((DefaultTableModel) table.getModel()).removeRow(row)

有关详细说明,请查看How to Use Tables

Example1Example2

答案 1 :(得分:1)

要从表格中删除行,您需要

((DefaultTableModel)jTable.getModel()).removeRow(rowToRemove);

JTable本身只是一些显示逻辑:它下面的表格模型控制着数据,而且它需要与之交互。然后,表格本身将呈现表格模型中的任何内容。

由于您自己创建了DefaultTableModel,因此更容易实现此目标的方法是通过

设置模型
DefaultTableModel model = new DefaultTableModel(data,header);
jTable1.setModel(model);

然后在

model.removeRow(rowToRemove);

这可以节省您每次查询表格以查找表格模型。

答案 2 :(得分:0)

现在我正在努力从JTable中删除记录,但是现在我想从db中删除它,当我手动输入字符串但我想通过点击它从db中删除它时它有效。这就是我所拥有的

PreparedStatement ps = conn.prepareStatement("DELETE FROM user WHERE JMBG = ? ");
         ps.setString(1, value2);
         ps.executeUpdate();

其中value2是一个String。 如何设置value2以从鼠标单击中获取值?

我明白了它的作用如下:

value2=(String) ((DefaultTableModel) jTable1.getModel()).getValueAt(row, 2);

其中row是

int row = jTable1.getSelectedRow();

开始时非常混乱,删除随机内容,但现在它按预期工作