首页 > Java > java教程 > 正文

如何在 Java 中提高 GUI 性能并在行删除后自动更新表?

Susan Sarandon
发布: 2024-11-19 12:37:02
原创
644 人浏览过

How to Improve GUI Performance and Auto-Update Table After Row Deletion in Java?

AbstractTableModel GUI 显示问题

此示例中的 GUI 问题似乎与异步访问数据库有关,这可能会导致不一致在表格显示中。要解决此问题,应在后台检索 ResultSet 以避免阻塞事件分派线程。数据可以分块发布并增量添加到表模型中,以提供更流畅的显示。

这是使用 SwingWorker 在后台检索和处理结果的代码的修改版本:

public class Gui2 extends JFrame {
    // ...

    public Gui2(Connection conn) {
        // ...

        SwingWorker<List<Row>, Integer> worker = new SwingWorker<List<Row>, Integer>() {
            @Override
            protected List<Row> doInBackground() throws Exception {
                try {
                    while (rs.next()) {
                        Row row = new Row();
                        row.ID = rs.getInt(1);
                        row.name = rs.getString(2);
                        publish(row);
                    }
                } catch (SQLException e) {
                    e.printStackTrace(System.err);
                }
                return null;
            }

            @Override
            protected void process(List<Row> chunks) {
                int n = getRowCount();
                for (Row row : chunks) {
                    tableData.add(row);
                }
                fireTableRowsInserted(n, n + chunks.size());
            }
        };
        worker.execute();
        
        // ...
    }
}
登录后复制

worker 将在后台检索行并以块的形式发布它们。 process() 方法会将行添加到 TableModel 并增量更新表显示。

行删除后自动更新表

在行删除后自动更新表行被删除时,删除操作应在 TableModel 中执行,而不是在 GUI 中执行。 TableModel 应该有一个delete() 方法,该方法从基础数据中删除行并触发表行已删除事件以通知表组件发生了更改。这是delete()方法的修改版本:

public class TableModel extends AbstractTableModel {
    // ...

    public void delete(int rowIndex) {
        // ...
        try {
            PreparedStatement pre = conn.prepareStatement(query);

            pre.executeUpdate();

            // Remove the row from the data
            tableData.remove(rowIndex);

            // Fire table rows deleted event
            fireTableRowsDeleted(rowIndex, rowIndex);

            JOptionPane.showMessageDialog(null, "Row Deleted Successfully");
        } catch (Exception e1) {
            JOptionPane.showMessageDialog(null, e1.getMessage());
        }
    }
}
登录后复制

通过这些修改,表格将在删除行后自动更新,提供更加用户友好和响应更快的界面。

以上是如何在 Java 中提高 GUI 性能并在行删除后自动更新表?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板