尽管具有包含适当数据的正确数据模型,但填充 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中文网其他相关文章!