Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Meningkatkan Prestasi GUI dan Jadual Auto-Kemas Kini Selepas Pemadaman Baris di Java?

Susan Sarandon
Lepaskan: 2024-11-19 12:37:02
asal
635 orang telah melayarinya

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

Isu Paparan GUI AbstractTableModel

Isu dengan GUI dalam contoh ini nampaknya berkaitan dengan mengakses pangkalan data secara tidak segerak, yang boleh menyebabkan ketidakkonsistenan dalam paparan jadual. Untuk menyelesaikan masalah ini, ResultSet harus diambil di latar belakang untuk mengelak daripada menyekat urutan penghantaran acara. Data boleh diterbitkan dalam ketulan dan ditambah pada model jadual secara berperingkat untuk memberikan paparan yang lebih lancar.

Berikut ialah versi kod yang diubah suai menggunakan SwingWorker untuk mendapatkan dan memproses keputusan di latar belakang:

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();
        
        // ...
    }
}
Salin selepas log masuk

Pekerja akan mendapatkan semula baris di latar belakang dan menerbitkannya dalam ketulan. Kaedah process() akan menambah baris pada TableModel dan mengemas kini paparan jadual secara berperingkat.

Kemas Kini Jadual Automatik Selepas Pemadaman Baris

Untuk mengemas kini jadual secara automatik selepas baris dipadamkan, operasi padam harus dilakukan dalam TableModel dan bukannya GUI. TableModel harus mempunyai kaedah delete() yang mengalih keluar baris daripada data asas dan menyalakan acara yang dipadamkan baris jadual untuk memberitahu komponen jadual tentang perubahan itu. Berikut ialah versi kaedah delete() yang diubah suai:

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());
        }
    }
}
Salin selepas log masuk

Dengan pengubahsuaian ini, jadual akan dikemas kini secara automatik selepas baris dipadamkan, memberikan antara muka yang lebih mesra pengguna dan responsif.

Atas ialah kandungan terperinci Bagaimana untuk Meningkatkan Prestasi GUI dan Jadual Auto-Kemas Kini Selepas Pemadaman Baris di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan