问题描述
- java连接数据库 更新JTable问题
-
//下面是我的table
class Store_table{
Object data[][];
Object name[]={"商品编号","商品名称","价格","上架日期","保质日期","库存"};
Store_table(String bq)
{String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=Store;IntegratedSecurity=True";// // Declare the JDBC objects. Connection con=null; Statement sql=null; ResultSet rs=null; try { // Establish the connection. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); con = DriverManager.getConnection(url); sql = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); rs = sql.executeQuery("SELECT * FROM 仓库 where 标签='"+bq+"'"); rs.last(); data=new Object[rs.getRow()][6]; // Iterate through the data in the result set and display it. int i=0; rs.beforeFirst(); while (rs.next()) { long number=rs.getLong("商品编号"); String name=rs.getString("商品名称"); float price=rs.getFloat("价格"); Date date=rs.getDate("上架日期"); int staydate=rs.getInt("保质日期"); int repertory=rs.getInt("库存"); data[i][0]=number; data[i][1]=name; data[i][2]=price; data[i][3]=date; data[i][4]=staydate; data[i][5]=repertory; i++; } } // Handle any errors that may have occurred. catch (Exception e) { e.printStackTrace(); } finally { if (rs != null) try { rs.close(); } catch (Exception e) { } if (sql != null) try { sql.close(); } catch (Exception e) { } if (con != null) try { con.close(); } catch (Exception e) { } } }
}
//我用JComboBox调用和更新JTable
public void actionPerformed(ActionEvent arg0) { String a=comboBox.getSelectedItem().toString(); store=new Store_table(a); //把store放进JTable ta=new JTable(store.data,store.name) { public boolean isCellEditable(int row, int column) {return false;};//设置列表数据不能修改 }; //把ta列表放进滚动列表 ta.setModel(model); JScrollPane jsp=new JScrollPane(ta); //JScrollPane jsp=new JScrollPane(store); //getContentPane().add(jsp,BorderLayout.CENTER); ta.setBackground(Color.ORANGE); jsp.setBackground(Color.GRAY); //jsp.setBackground(Color.ORANGE); contentPane.add(jsp); jsp.setBounds(0, 41, 743, 252); } });
怎么让JTable在JComboBox改动的时候更新呢?
据说需要setModel 再repaint 再updateUI
可是具体怎么做呢?
解决方案
table不用每次都重新new一个,每次刷新用的都是同一个table, 所以new Jtable是在JComboBox的actionPerformed()之外,在动作之内只需更新table的model并repaint和updateUI. 你可以每次刷新都新建一个model:
DefaultTableModel model=new DefaultTableModel(store.data, store.name);
table.setModel(model);
table.repaint();
table.updateUI();
或者新建一个model类,在Store_table(String bq)里面将数据用list的方式保存:
public class StoreTableModel extends AbstractTableModel{
private String[] names = {"商品编号","商品名称","价格","上架日期","保质日期","库存"};
private List<Object> list = new ArrayList<Object>();
public StoreTableModel() {
}
public void setRowData(List list) {
this.list = list;
fireTableDataChanged();
}
@Override
public int getRowCount() {
if(list.isEmpty())
return -1;
return list.size();
}
@Override
public int getColumnCount() {
return names.length;
}
@Override
public String getColumnName(int columnIndex) {
return names[columnIndex];
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (!list.isEmpty()) {
return list.get(rowIndex)[columnIndex];
}
return null;
}
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
}
时间: 2024-08-30 23:58:07