適切なデータを含む正しいデータ モデルがあるにもかかわらず、JTable に設定すると各行に重複値が含まれる可能性があり、データに関する懸念が生じます。整合性。
当初、疑惑はカスタム データ モデル CollectionDataModel に当てはまります。 Populate() メソッドは意図したとおりに動作しているようで、既存のデータをクリアし、コレクション内の項目を設定します。各項目は ArrayList
JTable に適切に作成するには、次の考慮事項に従う必要があります。念頭に置いてください:
JTable の実装の問題は、次の場合に発生する可能性があります。データ モデルまたは JTable 実装が誤って更新されます。 JTable がデータ モデルのメソッドを正しく利用していないため、不正確なデータが取り込まれている可能性があります。
問題を解決するには、CollectionDataModel の実装を注意深く確認して、契約に準拠していることを確認してください。さらに、JTable 実装を検査して、データ モデルのメソッドを正しく使用して行と列を設定していることを確認します。
適切な JTable 作成を示す次の例を考えてみましょう。 :
import java.awt.EventQueue; import java.awt.GridLayout; import java.util.Map; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; public class EnvTableTest extends JPanel { public EnvTableTest() { this.setLayout(new GridLayout()); this.add(new JScrollPane(new JTable(new EnvDataModel()))); } private static class EnvDataModel extends AbstractTableModel { private Map<String, String> data = System.getenv(); private String[] keys; public EnvDataModel() { keys = data.keySet().toArray(new String[data.size()]); } @Override public String getColumnName(int col) { if (col == 0) { return "Key"; } else { return "Value"; } } @Override public int getColumnCount() { return 2; } @Override public int getRowCount() { return data.size(); } @Override public Object getValueAt(int row, int col) { if (col == 0) { return keys[row]; } else { return data.get(keys[row]); } } } private void display() { JFrame f = new JFrame("EnvTableTest"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(this); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new EnvTableTest().display(); } }); } }
この例では、EnvDataModel カスタム データ モデルは環境変数からデータを正しく取得します。それを JTable に提供すると、適切にデータが設定されたテーブルが生成されます。
以上がデータ モデル内のデータが正しいにもかかわらず、JTable に重複行が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。