Всем привет! Подскажите как правильно использовать данную модель применительно к тому, что сама таблица JTABLE СОЗДАВАЛАСЬ в визуальном режиме( и как я понял в данной таблице на форме, используется DefaultTableModel с хранением информации о таблице в векторах) и чтобы JTABLE на форме остался в этом же виде после заполнения данными из БД. вот код вызова | Код | private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) { iso="iso4217"; try {
Class.forName("com.mysql.jdbc.Driver");
String url = "localhost:3306/baseratename";
String user = "root";
String password = "1980";
String query ="SELECT * FROM iso4217;"; //your data
Connection con = DriverManager.getConnection("jdbc:mysql://" + url, user, password);
Statement st = con.createStatement();
ResultSet rs = st.executeQuery(query);
DatabaseTableModel model =new DatabaseTableModel(); jTable3.setModel(model); // вызываю свою модель см прикрепл файл
model.setDataSource(rs); } catch (SQLException ex) { Logger.getLogger(GuideRate.class.getName()). log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { Logger.getLogger(GuideRate.class.getName()). log(Level.SEVERE, null, ex); }
|
| Код | /* * To change this template, choose Tools | Templates * and open the template in the editor. */
package exchangeratev3011108;
/** * * @author Kukresh_Family */ import java.util.*; import java.sql.*; import java.awt.*; import javax.swing.table.*; import javax.swing.*;
import java.util.*; import java.sql.*; import java.awt.*; import javax.swing.table.*; import javax.swing.*; public class DatabaseTableModel extends AbstractTableModel { private static String iso1; private static final long serialVersionUID = 1L; private ArrayList<String> columnNames = new ArrayList<String>(); private ArrayList<Class> columnTypes = new ArrayList<Class>(); private ArrayList data = new ArrayList();
public int getRowCount() { synchronized (data) { return data.size(); } } public int getColumnCount() { // columnNames.size(); return (columnNames.size()); } public Object getValueAt(int row, int col) { synchronized (data) { return ((ArrayList) data.get(row)).get(col); } } @Override public String getColumnName(int col) { String namecol1= columnNames.get(col);
return namecol1; } @Override public Class getColumnClass(int col) { return columnTypes.get(col); } public boolean isEditable() { return true; } @Override public void setValueAt(Object obj, int row, int col) { synchronized (data) { ((ArrayList) data.get(row)).set(col, obj); } } /** * Core of the model. Initializes column names, types, data from ResultSet. * * @param rs ResultSet from which all information for model is token. * @throws SQLException * @throws ClassNotFoundException */ public void setDataSource(ResultSet rs) throws SQLException, ClassNotFoundException { ResultSetMetaData rsmd = rs.getMetaData(); columnNames.clear(); columnTypes.clear(); data.clear(); int columnCount = rsmd.getColumnCount(); for (int i = 0; i < columnCount; i++) { columnNames.add(rsmd.getColumnName(i + 1)); Class type = Class.forName(rsmd.getColumnClassName(i + 1)); columnTypes.add(type); } fireTableStructureChanged(); while (rs.next()) { ArrayList rowData = new ArrayList(); for (int i = 0; i < columnCount; i++) { if (columnTypes.get(i) == String.class) rowData.add(rs.getString(i + 1)); else rowData.add(rs.getObject(i + 1)); } synchronized (data) { data.add(rowData); this.fireTableRowsInserted(data.size() - 1, data.size() - 1); } } }
} //***TEST***
|
Это сообщение отредактировал(а) kresh - 11.2.2009, 19:43
Присоединённый файл ( Кол-во скачиваний: 6 )
new_1 3,77 Kb
--------------------
Спросит вас продавец в магазине формулу Гаусса-Остроградского... А вы ее не знаете!
|