Java:子jDialog中的数据更新后刷新我的jTable

克里斯·J

我已经针对此问题调查了许多不同的问题和答案,但是找不到一个可行的方法。

我是Java的新手,但是有多种不同语言的经验,到目前为止(根据我正在尝试的内容),它的感觉有点像VBA,除了必须建立您需要的动作/功能之外感觉应该已经在那里。我希望这只是我自己的经验不足。

我正在将Netbeans IDE 8.2与Java Runtime 1.80一起使用。

我创建了包含jTable的jFrame。jTable使用如下数据构建:

public void showTasks(Boolean removeID) {
    ArrayList<Tasks> list = tasksList("SELECT * FROM tasks");
    JTable table = jTable1;
    DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
    Object[] row = new Object[4];
    for(int i=0;i<list.size();i++) {
        row[0]=list.get(i).getId();
        row[1]=list.get(i).getName();
        row[2]=list.get(i).getDesc();
        row[3]=list.get(i).getDate();
        model.addRow(row);
    }
    // Remove the 'id' column from the table view 
    if(removeID) {    table.removeColumn(table.getColumnModel().getColumn(0)); }
}

其背后的背景无关紧要,但从本质上来说,tasksList是一个将查询应用于SQL语句并返回ArrayList的函数。我用4列来构建行,然后删除第一列,以使“ ID”可用但不可见(此最后的操作已通过测试/实验隔离了)。

我有另一段代码,当单击一行时,它会打开一个jDialog,可以在其中更新MySQL DB。

问题

我试图抛出一个函数调用,以便在关闭jDialog时表数据“刷新”。我暂时在jFrame(jTable所在的位置)中添加了一个按钮来测试/调试此功能。

不过,我似乎无法使它正常工作。我获得的最接近的结果是调用showTasks(false),但这显然只是添加了具有更新数据的行,而不是替换数据集。我不是100%确定是否删除所有行,然后重新构建它们是否是“最佳实践”。

由于我是Java的新手,并且可能仍是从一种有缺陷的思维方法中进行研究,因此我发现很难将任何其他示例应用于我自己的示例。我似乎也找不到实现的方法fireTableDataChanged()

当然,这是我过度考虑的简单概念?

编辑-根据以下答案

如果删除所有行并将其重新添加就可以了,为什么有这样的事情会被认为是不正确的呢?

public void refreshTasks() {
    DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
    int row_total = model.getRowCount();
    for(int i= row_total -1;i>=0;i--) {
        model.removeRow(i);
    }
 showTasks(false);
}

编辑:按钮以调用数据更新

现在可以使用以下命令正确(如果不是不正确的话):

private DefaultTableModel parentTable;      // To store the parent 'Task' table model

public void setStart(int user,DefaultTableModel table) {

  this.txt_taskID.setText(Integer.toString(user)); // Converts the ID to a string
  addData(user);          // Populates the fields
  parentTable = table;    // Sets parent TableModel to a variable

}

对话框打开时,从Parent jFrame调用上面的代码,并传递Table模型和我要编辑的行的“ ID”。表格模型存储在中parentTable

还有一个“保存”按钮和一个“取消”按钮。我尚未将它们分开,目前,“保存”功能就是这样做的(SQL更新等)。我的“取消”按钮关闭对话框并刷新jTable,如下所示:

private void btn_CancelActionPerformed(java.awt.event.ActionEvent evt) { 

    this.setVisible(false);            // Hide the dialog
    Menu menu = new Menu();            // for accessing the tasksList function

    parentTable.setRowCount(0);        // Clears the jTable data

    // jTable data is then 'rebuilt' using the new data

    ArrayList<Tasks> list = menu.tasksList("SELECT * FROM tasks");
    Object[] row = new Object[4];
    for(int i=0;i<list.size();i++) {
        row[0]=list.get(i).getId();
        row[1]=list.get(i).getName();
        row[2]=list.get(i).getDesc();
        row[3]=list.get(i).getDate();
        parentTable.addRow(row);
    }
} 
卡米克尔

我不是100%确定是否删除所有行,然后重新构建它们是否是“最佳实践”。

是的,这可能是最佳做法。

唯一的其他方法是创建一个全新的TableModel并使用setModel()方法将其添加到表中。这种方法的问题在于它将重置您可能在桌上设置的所有自定义渲染器/编辑器。

从DefaultTableModel中删除所有行的最简单方法是仅使用:

model.setRowCount(0);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何刷新(使用DAO)从数据库中删除数据后,我的活动

在Javafx中更新或删除后如何刷新数据库表视图?

我在Java中追加子级后如何保存xml

JTable在插入删除或更新数据后如何刷新表模型。

会话过期后如何自动更新数据库而不刷新我的页面

删除或更新记录后如何刷新ng-Repeat中的数据

Mysql数据库更新,但是即使刷新,我在php html中的表也不会更新

MatDialog关闭并在Angular 6中更新数据库中的数据后如何刷新组件?

使用JDialog中的数据更新JInternalFrame中的表

更新数据后,有什么方法可以刷新baseadapter中的自定义视图吗?

更新数据后刷新物料表

使用Blazor在ASP.NET CORE中更新数据库后如何刷新网页

Redux更新数据后刷新材料UI表数据

刷新JTable中的所有数据

从数据库中删除项目后刷新jtable

Java JTABLE-从数据库中删除项目后刷新TextFields

刷新Jtable中的按钮

在Swing中刷新JTable数据

在JavaScript中刷新页面后,如何更新数据库中表的星级?

从JTable更新SQL中的数据

Java JDialog不显示JTable

刷新Java Jtable以显示更新的数据

从数据库中删除项目后如何刷新我的列表视图

java无法从我的jtable中的sql server中检索数据

Java GUI JTable“刷新”

在数据库中删除或插入后如何触发 Jtable 更新?

Flutter:刷新我的数据后显示

使用 Java Swing 的 JDialog 后如何更新 JFrame main 的值?

我想知道如何在使用 Ajax 调用更新数据后刷新模式并显示它