hi Tracy<br />that's how I do it. maybe it's a way too complicating, but it works.<br />my JTable uses certain TableModel that extends AbstractTableModel.<br />in Model class I define two Vectors - first contents data for JTable, and<br />second contents IDs of matching records in database table (in the <br />same order).<p>public class someTable<br />{<br /> private myTableModel tblModel;<br /> private JTable tbl;<br /> ...<br /> <br /> public someTable()<br /> {<p> //first I'm creating model for my table and fill the rows with data <br /> tblModel = new myTableModel();<br /> tblModel.query();<p> //then I'm creating a table itself and select the first row<br /> tbl = new JTable(tblModel);<br /> <br /> tbl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);<br /> try {<br /> tbl.setRowSelectionInterval(0, 0);<br /> }<br /> catch(IllegalArgumentException e) {<br /> }<p> }<br /> //and doing anything else<br /> ...<p>}<p>class myTableModel extends AbstractTableModel <br />{<br /> <br />//in tableData I put rows of JTable ( each as String[] )<br />//in recordIndex I put IDs ( int )<p> private Vector tableData;<br /> private Vector recordIndex;<br /> <br /> public myTableModel() {<br /> tableData = new Vector();<br /> recordIndex = new Vector();<br /> }<br /> <br /> public void query() <br /> {<br /> Connection dbCon = new Connection(...); <br /> try {<br /> Statement st = dbCon.createStatement();<br /> String strSQL = "SELECT ID, Name, ... FROM SOMETABLE WHERE ... ORDER BY...";<br /> ResultSet rs = st.executeQuery(strSQL);<p> tableData.clear();<br /> recordIndex.clear();<p> while ( rs.next() ) {<br /> String[] record = new String[number_of_fields_I_want_to_show];<br /> recordIndex.addElement( new Integer(rs.getInt(1)) );<br /> record[0] = rs.getString(2);<br /> ...<br /> tableData.addElement( record );<br /> }<br /> st.close();<br /> }<br /> catch (SQLException e) { <br /> }<br /> }<p>//this method links ID of the record and number of the row in JTable<br /> public int getRecNum(int n) {<br /> Integer i = new Integer(n);<br /> return(recordIndex.indexOf(i));<br /> }<br />}<p><br />//as I change data I use this code<br />//class myTable deals with table in the database, and this method returns <br />// an ID of the record that I just inserted or updated<p>int newRec = myTable.InsertUpdateRecord();<p>//query() method reloads tblModel and refreshes JTable<p>tblModel.query();<br />tblModel.fire()
hi Tracy<br />that's how I do it. maybe it's a way too complicating, but it works.<br />my JTable uses certain TableModel that extends AbstractTableModel.<br />in Model class I define two Vectors - first contents data for JTable, and<br />second contents IDs of matching records in database table (in the <br />same order).<p>public class someTable<br />{<br /> private myTableModel tblModel;<br /> private JTable tbl;<br /> ...<br /> <br /> public someTable()<br /> {<p> //first I'm creating model for my table and fill the rows with data <br /> tblModel = new myTableModel();<br /> tblModel.query();<p> //then I'm creating a table itself and select the first row<br /> tbl = new JTable(tblModel);<br /> <br /> tbl.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);<br /> try {<br /> tbl.setRowSelectionInterval(0, 0);<br /> }<br /> catch(IllegalArgumentException e) {<br /> }<p> }<br /> //and doing anything else<br /> ...<p>}<p>class myTableModel extends AbstractTableModel <br />{<br /> <br />//in tableData I put rows of JTable ( each as String[] )<br />//in recordIndex I put IDs ( int )<p> private Vector tableData;<br /> private Vector recordIndex;<br /> <br /> public myTableModel() {<br /> tableData = new Vector();<br /> recordIndex = new Vector();<br /> }<br /> <br /> public void query() <br /> {<br /> Connection dbCon = new Connection(...); <br /> try {<br /> Statement st = dbCon.createStatement();<br /> String strSQL = "SELECT ID, Name, ... FROM SOMETABLE WHERE ... ORDER BY...";<br /> ResultSet rs = st.executeQuery(strSQL);<p> tableData.clear();<br /> recordIndex.clear();<p> while ( rs.next() ) {<br /> String[] record = new String[number_of_fields_I_want_to_show];<br /> recordIndex.addElement( new Integer(rs.getInt(1)) );<br /> record[0] = rs.getString(2);<br /> ...<br /> tableData.addElement( record );<br /> }<br /> st.close();<br /> }<br /> catch (SQLException e) { <br /> }<br /> }<p>//this method links ID of the record and number of the row in JTable<br /> public int getRecNum(int n) {<br /> Integer i = new Integer(n);<br /> return(recordIndex.indexOf(i));<br /> }<br />}<p><br />//as I change data I use this code<br />//class myTable deals with table in the database, and this method returns <br />// an ID of the record that I just inserted or updated<p>int newRec = myTable.InsertUpdateRecord();<p>//query() method reloads tblModel and refreshes JTable<p>tblModel.query();<br />tblModel.fire()