Rumah >Java >javaTutorial >Mengapa JTable Saya Menunjukkan Baris Pendua Walaupun Data Betul dalam Model Data Saya?
Walaupun mempunyai model data yang betul dengan data yang sesuai, mengisi JTable mungkin menyebabkan setiap baris mengandungi nilai pendua, menimbulkan kebimbangan tentang data integriti.
Pada mulanya, syak wasangka jatuh pada model data tersuai, CollectionDataModel. Kaedah kaedah populate() nampaknya berkelakuan seperti yang dimaksudkan, mengosongkan data sedia ada dan mengisinya dengan item dalam koleksi, setiap satu disimpan dalam ArrayList
Untuk mengisi JTable dengan betul, pertimbangan berikut harus disimpan dalam fikiran:
Isu populasi JTable mungkin timbul jika model data atau pelaksanaan JTable tidak dikemas kini dengan betul. JTable mungkin tidak menggunakan kaedah model data dengan betul, yang membawa kepada populasi yang salah.
Untuk menyelesaikan isu, semak dengan teliti pelaksanaan CollectionDataModel untuk memastikan ia mematuhi kontrak. Selain itu, periksa pelaksanaan JTable untuk mengesahkan bahawa ia menggunakan kaedah model data dengan betul untuk mengisi baris dan lajurnya.
Pertimbangkan contoh berikut yang menunjukkan populasi JTable yang betul :
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(); } }); } }
Dalam contoh ini, model data tersuai EnvDataModel dengan betul mendapatkan semula data daripada pembolehubah persekitaran dan memberikannya kepada JTable, menghasilkan jadual yang diisi dengan betul.
Atas ialah kandungan terperinci Mengapa JTable Saya Menunjukkan Baris Pendua Walaupun Data Betul dalam Model Data Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!