儘管具有包含適當數據的正確數據模型,但填充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中文網其他相關文章!