Obwohl ein korrektes Datenmodell mit geeigneten Daten vorhanden ist, kann das Auffüllen einer JTable dazu führen, dass jede Zeile doppelte Werte enthält, was Bedenken hinsichtlich der Daten aufwirft Integrität.
Zunächst fällt der Verdacht auf das benutzerdefinierte Datenmodell, CollectionDataModel. Die Methode populate() scheint sich wie beabsichtigt zu verhalten, indem sie vorhandene Daten löscht und sie mit den Elementen in der Sammlung füllt, die jeweils in einer ArrayList
Um eine JTable ordnungsgemäß zu füllen, sollten die folgenden Überlegungen beachtet werden Beachten Sie:
Das Problem der JTable-Auffüllung kann auftreten, wenn das Datenmodell oder die JTable-Implementierung falsch ist aktualisiert. Die JTable nutzt die Methoden des Datenmodells möglicherweise nicht korrekt, was zu einer falschen Auffüllung führt.
Um das Problem zu beheben, überprüfen Sie sorgfältig die CollectionDataModel-Implementierung, um sicherzustellen, dass sie dem Vertrag entspricht. Überprüfen Sie außerdem die JTable-Implementierung, um sicherzustellen, dass sie die Methoden des Datenmodells korrekt verwendet, um ihre Zeilen und Spalten zu füllen.
Betrachten Sie das folgende Beispiel, das die ordnungsgemäße JTable-Auffüllung zeigt :
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(); } }); } }
In diesem Beispiel ruft das benutzerdefinierte Datenmodell EnvDataModel korrekt Daten aus den Umgebungsvariablen ab und stellt sie bereit zur JTable, was zu einer ordnungsgemäß gefüllten Tabelle führt.
Das obige ist der detaillierte Inhalt vonWarum zeigt meine JTable trotz korrekter Daten in meinem Datenmodell doppelte Zeilen an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!