我想在JTable中添加行,但效果不佳。有人能帮帮我吗?表正常显示,但不是动态显示
//displays all data in Jtable
void refresh()
{
Vector<Vector<String>> data = new Vector<>();
ResultSet rs = st.executeQuery("SELECT * FROM tblInfo");
while(rs.next())
{
Vector<String> d = new Vector<>();
d.add(rs.getString("ID"));
d.add(rs.getString("Name"));
d.add(rs.getString("User"));
d.add(rs.getString("Pass"));
data.add(d);
}
Vector<String> header = new Vector<>();
header.add("ID");
header.add("Name");
header.add("Username");
header.add("Password");
model = new DefaultTableModel(data, header);
table = new JTable(model);
st.close();
rs.close();
table.setBackground(Color.LIGHT_GRAY);
table.setForeground(Color.white);
scroll = new JScrollPane(table);
getContentPane().add(scroll);
st.close();
rs.close();
}
//adding data to database
void addDoctor()
{
st.executeUpdate("INSERT INTO tblInfo(Name) VALUES ('Name')");
st.close();
}
public void actionPerformed(ActionEvent e){
Object source = e.getSource();
else if(btnAdd == source)
{
addDoctor();
refresh();
}感谢您的回复。:)我在发帖之前已经编辑了这段代码。
发布于 2013-03-01 17:42:03
1)不要在try - catch - finally block中创建任何对象;对于Swing GUI,请在此之前准备好这些对象,最好将其作为局部变量。
2)您创建了一个新的
model = new DefaultTableModel(data, header);
table = new JTable(model);这些对象可能永远不会添加到已经可见的GUI中。Swing GUI不知何故并不关心,容器也不知道您更改(重置、重新初始化)了底层模型和JTable。您必须在更改时通知Swing GUI,但这不是正确的方式。
3)不要在运行时重新创建这个对象,重用已经存在的对象,只创建一次JTable和DefaultTableModel。
4)使用model.setRowCount(0);重置DefaultTableModel,然后从JDBC添加新行。
5)不要重复发明轮子,搜索ResultSetTableModel或TableFromDatabase。
6)将代码行st.close(); & rs.close();移到finally block中。
发布于 2013-03-01 18:20:27
使用DefaultTableModel.setDataVector()将包含新数据的新矢量添加到现有的TableModel/JTable。或者使用insertRow/removeRow方法。或者实现您自己的AbstractTableModel。
https://stackoverflow.com/questions/15154415
复制相似问题