AbstractTableModel GUI 表示の問題
前述の問題は、データベース アクセスの非同期の性質と、バックグラウンドで行を取得する必要があるために発生します。イベントディスパッチスレッドのブロックを回避します。 SwingWorker は、このプロセスを容易にします。
解決策:
次のワークフローを実装します。
- SwingWorker インスタンス。
- 次を使用して中間結果を公開します。 public().
- process() のテーブルモデルにパブリッシュされた行を追加します。
洗練された実装:
- AbstractTableModel をカスタムで拡張するJDBCModel.
- JDBCModel 内に JDBCWorker クラスを作成し、行の取得をデータベースに委任します。
- JDBCWorker は行をモデルに公開し、EDT 上の GUI を更新します。
- モデルからの行の削除を JDBCModel の delete() まで延期します。
- データベースから行を正常に削除した後、fireTableRowsDeleted() を使用します。
追加の推奨事項:
- ライブで実装するビューでフィルタリングしてユーザー エクスペリエンスを向上させます。
- getPreferredScrollableViewportSize() をオーバーライドして、テーブルの優先ビューポート サイズを設定します。
- TableModel などの一般的な API 名との名前の衝突を回避します。
以上がAbstractTableModel と SwingWorker を使用してデータベース データを Swing テーブルに効率的に表示する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。