我想在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();
}
感谢您的回复。 :) 我在发布之前编辑了这段代码。
答案 0 :(得分:1)
1)不要在try - catch - finally block
内创建任何对象;对于Swing GUI,之前准备这些对象,更好地作为局部变量。
2)你创建了一个新的
model = new DefaultTableModel(data, header);
table = new JTable(model);
并且那些Object可能永远不会添加到已经可见的GUI中。 Swing GUI并不在意,并且容器不知道您更改(重置,重新初始化)底层模型和JTable。您必须通知Swing GUI更改,但这不是正确的方法。
3)不要在运行时重新创建此Object,重用已存在的对象,只创建一次JTable和DefaultTableModel。
4)使用DefaultTableModel
重置model.setRowCount(0);
,然后从JDBC添加新行
5)不要重新发明轮子,搜索ResultSetTableModel
或TableFromDatabase
。
6)移动代码行st.close();
&amp; rs.close();
finally block
。
答案 1 :(得分:0)
使用DefaultTableModel.setDataVector()将带有新数据的新Vector添加到现有TableModel / JTable。或者使用insertRow / removeRow方法。或者实现自己的AbstractTableModel。