我可以在不使用rs2xml.jar的情况下为jTable创建方法吗?

时间:2016-10-01 09:08:27

标签: java swing netbeans netbeans-8.1

我是编程新手,我使用netbeans 8.1编写了一个程序。我的程序用于显示要在jTable中搜索的所有相关项目。然后我们可以在另一个jTable中选择特定项目。我使用rs2xml为jTable创建一个方法,它工作正常。但在我使用它之后,我的搜索出了问题。它不会显示正确的搜索项目。当我从库搜索中删除rs2xml.jar工作正常,但当我选择该项时,它不会显示在jTable中。我无法解决这个问题。

这是搜索项的代码:

     private void txtSearchKeyReleased(java.awt.event.KeyEvent evt) {                                      

    try {

        @SuppressWarnings("LocalVariableHidesMemberVariable")
        ResultSet rs = oilmart.getConnection().createStatement().executeQuery("SELECT * FROM stock WHERE Item_Name LIKE '%" + txtSearch.getText() + "%'");
        if (rs.next()) {

            billinfo();
            txtPlace.setText(rs.getString("Place"));
        } else {

            JOptionPane.showMessageDialog(this, "Result not found", null, JOptionPane.ERROR_MESSAGE, null);

        }

    } catch (SQLException | HeadlessException e) {
    }

    // TODO add your handling code here:
}    

这是我使用rs2xml.jar创建的表方法:

    public void billinfo() {

    DefaultTableModel dtm = (DefaultTableModel) tblBillinfo.getModel();
    dtm.setRowCount(0);

    try {
        @SuppressWarnings("LocalVariableHidesMemberVariable")
        ResultSet rs = oilmart.getConnection().createStatement().executeQuery("SELECT * FROM stock WHERE Item_Name LIKE '%" + txtSearch.getText() + "%'");

        while (rs.next()) {

            Vector v = new Vector();
            v.add(rs.getString("Item_No"));
            v.add(rs.getString("Item_Name"));
            v.add(rs.getString("Qty"));
            v.add(rs.getString("Price_per_Qty"));
            v.add(rs.getString("Place"));

            buy_price = Integer.parseInt(rs.getString("Price_per_Qty"));

            dtm.addRow(v);
            tblBillinfo.setModel(DbUtils.resultSetToTableModel(rs));
        }

    } catch (Exception e) {
    }

}

这是用于选择特定项目:

     private void tblBillinfoMouseClicked(java.awt.event.MouseEvent evt) {                                         
    x++;

    int r = tblBillinfo.getSelectedRow();

    String no = tblBillinfo.getValueAt(r, 0).toString();
    String name = tblBillinfo.getValueAt(r, 1).toString();
    String buy = tblBillinfo.getValueAt(r, 3).toString();

    buy_price = (int) tblBillinfo.getValueAt(r, 3);

    String plc = tblBillinfo.getValueAt(r, 4).toString();

    tblBill.setValueAt(no, x, 0);
    tblBill.setValueAt(name, x, 1);
    tblBill.setValueAt(buy, x, 2);
    txtPlace.setText(plc);


}                                        

请帮我解决这个问题。谢谢。

1 个答案:

答案 0 :(得分:1)

您有代码(看似正确)将每行数据添加到TableModel:

dtm.addRow(v);

然后你的下一个语句将第一行替换为ResultSet中剩余的数据行:

tblBillinfo.setModel(DbUtils.resultSetToTableModel(rs));

结果是您的TableModel将缺少第一行数据。

摆脱上述陈述。