首頁  >  文章  >  Java  >  如何在 Java 中提高 GUI 效能並在行刪除後自動更新表?

如何在 Java 中提高 GUI 效能並在行刪除後自動更新表?

Susan Sarandon
Susan Sarandon原創
2024-11-19 12:37:02646瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn