DefaultTableModel 不刷新
Posted
技术标签:
【中文标题】DefaultTableModel 不刷新【英文标题】:DefaultTableModel doesn't refresh 【发布时间】:2012-05-11 18:31:19 【问题描述】:新数据输入数据库后,我的 JTable 不会刷新。我需要终止并再次执行以查看结果。我已经包含了 DefaultTableModel 和 fireTableDataChanged。我还错过了什么?谢谢!
columnNames = new Vector();
data = new Vector();
try
//database stuffs
catch
DefaultTableModel tm = new DefaultTableModel();
JTable table = new JTable (tm);
JScrollPane scrollPane = new JScrollPane(table);
table = new JTable(data,columnNames)
public boolean isCellEditable(int row, int column)
return false;
public void newDataAvailable (TableModelEvent e)
;
scrollPane = new JScrollPane(table);
scrollPane.setBounds(33, 47, 256, 228);
panel.add(scrollPane);
我可以创建一个“刷新按钮”并改为刷新值吗?
【问题讨论】:
【参考方案1】:-
我创建了一个新项目,其中我选择了一个新框架并将一个表格、一个标签、一个文本字段和一个按钮从摇摆控件拖动到您的框架。
2.在后端创建一个表...
-
从此链接下载 rs2xml jar 文件
Download rs2xml.jar
-
将其添加到项目库中……
右键项目>属性>库>添加jar/文件夹>选择jar>ok
5.然后使用以下代码连接mysql
public class DBConnect
Connection connection = null;
public Connection getConnection()
try
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "");
System.out.println("connection successfully");
catch (Exception ex)
ex.printStackTrace();
return connection;
使用以下代码调用页面中的函数
con=new DBConnect();
statement=con.getConnection().createStatement();
7.然后创建一个更新函数,输入以下代码……
void update_table() throws SQLException
rs=statement.executeQuery("select * from details");
jTable1.setModel(DbUtils.resultSetToTableModel(rs));
8.在按钮动作事件中输入以下内容并调用更新函数
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
try
Object name=jTextField1.getText();
String sql="insert into details (name) values('"+name+"')";
int resultset=statement.executeUpdate(sql);
update_table();
catch (SQLException ex)
Logger.getLogger(update.class.getName()).log(Level.SEVERE, null, ex);
9.然后运行项目……
您也可以按照本教程进行操作:--
How to refresh JTable after insert delete or update the data in java Netbeans ID
【讨论】:
【参考方案2】:您创建新的JTable
实例。只需创建一次并将新模型设置为现有的JTable
(正确添加到容器中)。
【讨论】:
谢谢。我修改了我的代码,但它似乎仍然无法正常工作。我应该调用特定的方法来刷新值吗?我是否必须 validate() 或 repaint() 我的 JTable?【参考方案3】:您不必显式调用fireTableDataChanged()
; DefaultTableModel
会在您更新模型时自动执行此操作,如相关的 example 所示。
【讨论】:
谢谢。我已经删除了 fireTableDataChanged(),它仍然无法正常工作。我应该添加 newDataAvailable() 吗?使用PreparedStatement直接往数据库中添加数据,会不会影响自动更新? 在数据库中插入新数据并提交结果后,您需要再次运行原始查询以获取新行。以上是关于DefaultTableModel 不刷新的主要内容,如果未能解决你的问题,请参考以下文章