Rumah >Java >javaTutorial >Mengapakah baris JTable saya menunjukkan nilai pendua apabila menggunakan DataModel tersuai?
Nilai Pendua JTable dalam Baris
Mengisi JTable dengan DataModel tersuai kadangkala boleh membawa kepada kemunculan data pendua yang tidak dijangka dalam baris jadual . Walaupun ini mungkin mencadangkan isu dengan DataModel, pemeriksaan yang lebih dekat sering mendedahkan sebaliknya, menjadikan punca tingkah laku ini sebagai misteri.
Satu penjelasan yang mungkin untuk fenomena ini terletak pada pelaksanaan JTable itu sendiri. Apabila DataModel digunakan untuk mengisi JTable, nilai yang diberikan dalam jadual diperoleh terus daripada kaedah getValueAt DataModel. Jika kaedah ini gagal mendapatkan semula nilai unik dengan betul untuk setiap sel dalam jadual, nilai yang diberikan akan diduplikasi merentas berbilang baris.
Untuk menangani isu ini, adalah penting untuk memastikan bahawa kaedah getValueAt sentiasa mengembalikan nilai yang dimaksudkan untuk setiap sel. Ini boleh dicapai dengan mengisi dengan betul struktur data asas yang digunakan oleh DataModel. Dalam kes DataModel yang disediakan, kaedah mengisi mengisi ArrayList data dengan baris data. Walau bagaimanapun, jika kod yang mengisi ArrayList ini tidak menetapkan nilai unik dengan betul kepada setiap baris, jadual yang terhasil akan memaparkan nilai pendua.
Sebagai peringatan, tidak mencukupi untuk mengubah suai kaedah getValueAt sahaja untuk mengembalikan yang berbeza. nilai, kerana ini tidak akan membetulkan isu asas. Sebaliknya, tumpuan harus diberikan pada memastikan bahawa struktur data yang digunakan untuk mengisi DataModel mengandungi data yang betul dari awal. Dengan menangani sumber data, adalah mungkin untuk menghalang nilai pendua daripada muncul dalam JTable.
Untuk memberikan contoh yang lebih konkrit, pertimbangkan coretan kod berikut:
import java.util.ArrayList; import javax.swing.table.AbstractTableModel; public class CollectionDataModel extends AbstractTableModel { private ArrayList<ArrayList<String>> data; public CollectionDataModel() { data = new ArrayList<ArrayList<String>>(); } @Override public int getColumnCount() { if (data.isEmpty()) return 0; return data.get(0).size(); } @Override public int getRowCount() { return data.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { if (rowIndex >= getRowCount()) return null; if (columnIndex >= getColumnCount()) return null; return data.get(rowIndex).get(columnIndex); } public void populate(Collection c) { data.clear(); for (Item i : c.getItems()) { ArrayList<String> row = new ArrayList<String>(); for (Property p : i.getProperties().values()) { row.add(p.toString()); } data.add(row); } fireTableDataChanged(); } }
Dalam kod ini , kaedah mengisi mengisi ArrayList data dengan baris data yang diperoleh daripada objek Koleksi. Untuk mengelakkan nilai pendua dalam JTable, adalah penting untuk memastikan bahawa setiap baris dalam ArrayList mengandungi data unik. Ini boleh dicapai dengan menyemak kehadiran data pendua sebelum menambah baris baharu pada ArrayList atau dengan menggunakan struktur data yang menguatkuasakan keunikan.
Dengan menangani sumber data secara langsung, adalah mungkin untuk menghalang nilai pendua daripada muncul dalam JTable. Pendekatan ini lebih dipercayai dan cekap daripada memanipulasi kaedah getValueAt, kerana ia memastikan data asas adalah tepat dari awal.
Atas ialah kandungan terperinci Mengapakah baris JTable saya menunjukkan nilai pendua apabila menggunakan DataModel tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!