tenten
tenten

Reputation: 1276

get more rows in JTable java

I coded Auto Suggesting Combo boxes. Functionality is,

*when a user type the first letter in either combo box , data retrieves from the MySQL database and show in a popup list, when a user click on a suggested item ,then press Add button that item added to the J Table and clears the combo boxes

But when I select another item from the combo box and click Add button before added one disappears

*How can I keep Both or many items in the J Table according to above situation *

I'll post my code:

private void NamecomboActionPerformed(java.awt.event.ActionEvent evt) {                                          
    String drugname = (String) Namecombo.getSelectedItem();
    try{

    String name = "SELECT * FROM druginfo WHERE ItemName LIKE '"+drugname+"%'";

    PreparedStatement pstmt = conn.prepareStatement(name);
    ResultSet rs = pstmt.executeQuery();

    while (rs.next()){
        IDcombo.setSelectedItem(rs.getString("ItemID"));  
    }

    }catch(Exception e){
      JOptionPane.showMessageDialog(null,"error "+ e);
    }



}                                         

private void IDcomboActionPerformed(java.awt.event.ActionEvent evt) {                                        
    String drugid = (String) IDcombo.getSelectedItem();
    try{

    String name = "SELECT * FROM druginfo WHERE ItemID LIKE '"+drugid+"%'";

    PreparedStatement pstmt = conn.prepareStatement(name);
    ResultSet rs = pstmt.executeQuery();

    while (rs.next()){
        Namecombo.setSelectedItem(rs.getString("ItemName"));  
    }

    }catch(Exception e){
      JOptionPane.showMessageDialog(null,"error "+ e);
    }
    try{

    String exp = "SELECT ExpDate FROM druginfo WHERE ItemID LIKE '"+drugid+"%'";
    PreparedStatement pstmt = conn.prepareStatement(exp);
    ResultSet rs2 = pstmt.executeQuery();

    while (rs2.next()){
        String date = rs2.getString("ExpDate");

        exptxt.setText(date);
    }

    }catch(Exception e){
      JOptionPane.showMessageDialog(null,"error "+ e);
    }
} 

add button action performed for adding item to JTable;

private void add_btnActionPerformed(java.awt.event.ActionEvent evt) {                                        

        String temp = (String) IDcombo.getSelectedItem();
        String sql = "select ItemID,ItemName,CostPrice,InStock from druginfo where ItemID=?";
    try {   
        pst=conn.prepareStatement(sql);
        pst.setString(1, temp);
        rs=pst.executeQuery();
        tableSale.setModel(DbUtils.resultSetToTableModel(rs));
        IDcombo.setSelectedItem(null);
        Namecombo.setSelectedItem(null);
    } catch (Exception ex) {
       JOptionPane.showMessageDialog(null, ex);
    }

Upvotes: 2

Views: 219

Answers (2)

Sarfaraz Khan
Sarfaraz Khan

Reputation: 2186

Add the current selection(resultset data) to JTable object without replacing the old data.

rs=pst.executeQuery();
addDataToTable(tableSale,DbUtils.resultSetToTableModel(rs));
IDcombo.setSelectedItem(null);
Namecombo.setSelectedItem(null);

//ADD this method
public void addDataToTable(JTable table,TableModel model) {
    DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
    DefaultTableModel resultSetModel = (DefaultTableModel) model;
    for (int i = 0; i < resultSetModel.getRowCount(); i++) {
        Vector row=new Vector();
        for (int j = 0; j < resultSetModel.getColumnCount(); j++) {
            row.addElement(resultSetModel.getValueAt(i, j));
        }
        tableModel.addRow(row);
    }
    tableModel.fireTableDataChanged();
}

Upvotes: 1

Madhan
Madhan

Reputation: 5818

This tableSale.setModel(DbUtils.resultSetToTableModel(rs)); will replace the old model with new model.So obviously datas will be lost.You have to add values to the existing model.I have added a snippet which will help you.

Replace tableSale.setModel(DbUtils.resultSetToTableModel(rs)); with addValuesToModel(DbUtils.resultSetToTableModel(rs));

addValuesToModel(DbUtils.resultSetToTableModel(rs));

public void addValuesToModel(TableModel resultModel) {
    DefaultTableModel tmodel = (DefaultTableModel) tableSale.getModel();
    DefaultTableModel rmodel = (DefaultTableModel) resultModel;
    for (int i = 0; i < rmodel.getRowCount(); i++) {
        Object[] row = new Object[rmodel.getColumnCount()];
        for (int j = 0; j < rmodel.getColumnCount(); j++) {
            row[j] = rmodel.getValueAt(i, j);
        }
        tmodel.addRow(row);
    }
}

Upvotes: 1

Related Questions