【问题标题】:accessing vector inside a vector in Java在Java中访问向量内的向量
【发布时间】:2014-10-08 18:37:40
【问题描述】:

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

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

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

【问题讨论】:

  • 您将data 添加到DefaultTableModel,向量是否以某种方式链接到userVector?我觉得缺少很多必要的代码。还有...How to remove a row from JTable?
  • jTable1.remove(int); JTable 没有 remove() 方法。您调用的方法是Container.remove(...),它通常用于从面板而不是表格中删除组件,因为表格不包含任何子组件。

标签: java swing jtable defaulttablemodel


【解决方案1】:

使用DefaultTableModel 根据行号删除一行。

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

详细解释请看How to Use Tables

Example1Example2

【讨论】:

    【解决方案2】:

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

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

    JTable 本身实际上只是一些显示逻辑:它是控制数据的表模型,它是您需要与之交互的。然后,表格本身将呈现表格模型中存在的任何内容。

    由于您是自己创建DefaultTableModel,因此实现此目的的更简单的总体方法是通过设置模型

    DefaultTableModel model = new DefaultTableModel(data,header);
    jTable1.setModel(model);
    

    然后是以后

    model.removeRow(rowToRemove);
    

    这样可以节省您每次查询表以查找表模型的时间。

    【讨论】:

      【解决方案3】:

      现在我可以从 JTable 中删除记录,但现在我也想从 db 中删除它,当我手动输入字符串时它可以工作,但我想通过单击它从 db 中删除它。这是我所拥有的

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

      其中 value2 是一个字符串。 如何设置 value2 以通过鼠标单击获取值?

      我知道了,它就像下一个一样工作:

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

      行在哪里

      int row = jTable1.getSelectedRow();
      

      一开始很乱,删除随机的东西,但现在它按预期工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-10
        • 2011-10-20
        • 2018-11-05
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 2018-12-16
        相关资源
        最近更新 更多