ホームページ >Java >&#&チュートリアル >JTable は Java Swing アプリケーションで大きなテキスト ファイルを表示する際のパフォーマンスをどのように向上させることができますか?
大きなテキスト ファイルのロードと表示: 実用的な代替手段
Java Swing アプリケーションで大きなテキスト ファイルを扱う場合は、このようなデータのロードと表示に関連するパフォーマンスの制限と知覚される遅延。 10 MB を超えるテキスト ファイルの場合、単純な Document と JTextComponent の組み合わせでは十分ではない可能性があります。
効率的な表示のために JTable の使用を検討してください
パフォーマンスとユーザー エクスペリエンスを向上させるには、次のことを検討してください。 JTable を使用して大きなテキスト ファイルを表示します。このアプローチの利点は次のとおりです。
実装の詳細
このアプローチを実装するには、TableModel を作成し、テキスト ファイルのデータで更新します。バックグラウンドで読み込みを実行する SwingWorker。オーバーヘッドを削減するには、以下のコード例に示すようにカスタム TableModel を使用することを検討してください。
import java.util.List; import javax.swing.table.AbstractTableModel; public class MyTableModel extends AbstractTableModel { private List<String> data; public MyTableModel(List<String> data) { this.data = data; } @Override public int getRowCount() { return data.size(); } @Override public int getColumnCount() { return 1; } @Override public Object getValueAt(int rowIndex, int columnIndex) { return data.get(rowIndex); } }
すべてをまとめて実行
サンプル コードでは、これらの概念を組み合わせて、大きなログ ファイルを読み取り、その内容を JTable に効率的に表示し、結果を即座にユーザーに表示する Swing アプリケーション
import javax.swing.JFrame; import javax.swing.JProgressBar; import javax.swing.JScrollPane; import javax.swing.JTable; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import javax.swing.SwingWorker; public class DisplayLog { private static final String FILE_PATH = "path/to/your/log.txt"; public static void main(String[] args) { JFrame frame = new JFrame("Display Log"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Create a JTable and its TableModel TableModel model = new MyTableModel(); JTable table = new JTable(model); frame.add(new JScrollPane(table)); // Add a progress bar for visual feedback JProgressBar progressBar = new JProgressBar(); frame.add(progressBar, BorderLayout.NORTH); // Create a SwingWorker to load the file in the background SwingWorker<Void, String> worker = new SwingWorker<>() { @Override protected Void doInBackground() throws Exception { BufferedReader reader = new BufferedReader(new FileReader(new File(FILE_PATH))); String line; while ((line = reader.readLine()) != null) { publish(line); } return null; } @Override protected void process(List<String> lines) { // Update the TableModel with the new lines ((MyTableModel) model).data.addAll(lines); // Notify the TableModel that the data has changed model.fireTableDataChanged(); } @Override protected void done() { // Hide the progress bar when the loading is complete progressBar.setVisible(false); } }; worker.execute(); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }
この手法は、JTable を利用してデータを非同期にロードすることにより、Swing アプリケーションで大きなテキスト ファイルを処理するための使いやすく効率的なソリューションを提供します。
以上がJTable は Java Swing アプリケーションで大きなテキスト ファイルを表示する際のパフォーマンスをどのように向上させることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。