Java 使用JCreator将行添加到JTable
我想在JTable中添加行,但效果不好。有人能帮我吗?表正在正常显示,但不是动态显示Java 使用JCreator将行添加到JTable,java,swing,jtable,variable-assignment,Java,Swing,Jtable,Variable Assignment,我想在JTable中添加行,但效果不好。有人能帮我吗?表正在正常显示,但不是动态显示 //displays all data in Jtable void refresh() { Vector<Vector<String>> data = new Vector<>(); ResultSet rs = st.executeQuery("SELECT * FROM tblInfo"); while(rs.next())
//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();
}
//显示Jtable中的所有数据
无效刷新()
{
向量数据=新向量();
结果集rs=st.executeQuery(“从tblInfo中选择*);
while(rs.next())
{
向量d=新向量();
d、 添加(rs.getString(“ID”);
d、 添加(rs.getString(“名称”);
d、 添加(rs.getString(“用户”);
d、 添加(rs.getString(“Pass”);
数据.添加(d);
}
向量头=新向量();
标题。添加(“ID”);
标题。添加(“名称”);
标题。添加(“用户名”);
标题。添加(“密码”);
模型=新的DefaultTableModel(数据,标题);
表=新JTable(型号);
圣克洛斯();
rs.close();
表.立根背景(颜色:浅灰色);
表.设置前景(颜色.白色);
滚动=新的JScrollPane(表格);
getContentPane().add(滚动);
圣克洛斯();
rs.close();
}
//向数据库添加数据
void addDoctor()
{
st.executeUpdate(“插入tblInfo(名称)值(‘名称’)”);
圣克洛斯();
}
已执行的公共无效操作(操作事件e){
对象源=e.getSource();
else if(btnAdd==源)
{
addDoctor();
刷新();
}
谢谢您的回复。:)
在我发布之前,我已经编辑了这段代码。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) 不要重新发明轮子,搜索resultsetablemodel
或TableFromDatabase
6) 将代码行
st.close();
和rs.close();
移动到最终块
用于将新数据的新向量添加到现有的TableModel/JTable中。或者使用insertRow/removeRow方法。或者实现您自己的AbstractTableModel。这是什么意思“Table显示正常但不是动态的”?您在表中没有看到任何数据吗?我可以在表中看到数据。问题是,添加数据后,它不会反映在JTable中,除非我将重新运行程序。请编辑您的问题,以包括显示您描述的问题的。若要刷新现有表,只需重新创建模型,然后使用Table.setModel(…);
。我不知道问题出在哪里。我的JTable没有刷新。我需要做什么?“请注意,为dataVector
传递null
值会导致未指定的行为,可能会导致异常。”另请参见此。很高兴提供帮助;这是我从那天开始学习的项目;+1表示其他观点;抱歉编辑工作量过大。如何使用insertRow方法?您能教我吗?谢谢。使用insertRow(int row,Vector rowData)方法您只需在表中的某个位置插入一行。使用row参数,您可以指定要在哪一点插入rowData。