>Java >java지도 시간 >Java에서 행 삭제 후 GUI 성능을 향상하고 테이블 자동 업데이트하는 방법은 무엇입니까?

Java에서 행 삭제 후 GUI 성능을 향상하고 테이블 자동 업데이트하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-19 12:37:02660검색

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();
        
        // ...
    }
}

작업자는 백그라운드에서 행을 검색하여 청크로 게시합니다. process() 메소드는 TableModel에 행을 추가하고 테이블 표시를 점진적으로 업데이트합니다.

행 삭제 후 자동 테이블 업데이트

테이블을 자동으로 업데이트하려면 행이 삭제되면 GUI 대신 TableModel에서 삭제 작업을 수행해야 합니다. 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으로 문의하세요.