ما هي أسهل طريقة لعرض محتويات ArrayList الأجسام في JTable؟
-
05-07-2019 - |
سؤال
ولدي ArrayList من الكائنات المسار. كل كائن المسار لديه المجالات التالية (جميع سلاسل):
والعنوان، العنوان، الخالق، الألبوم، النوع، الملحن
وأريد أن عرض هذه المسارات في JTable، مع كل صف يجري مثيل كائن المسار، وكل عمود يحتوي على إحدى خصائص كائن المسار.
وكيف يمكنني عرض هذه البيانات باستخدام JTable؟ لقد استخدمت AbstractTableModel التي تطبق طريقة getValueAt () بشكل صحيح. ومع ذلك، أنا لا أرى أي شيء على الشاشة.
وأم أنه أسهل فقط لاستخدام المصفوفات؟
المحلول
في لإضافة محتويات لعرضه على JTable
، واحد يستخدم TableModel
لإضافة عناصر لعرضه.
واحد من وسيلة لإضافة صف من البيانات إلى DefaultTableModel
هو عن طريق استخدام في addRow
طريقة التي سوف تتخذ مجموعة من Object
s التي تمثل الكائنات في صف واحد. حيث لا توجد طرق لإضافة محتويات مباشرة من ArrayList
، يمكن للمرء أن إنشاء مجموعة من Object
s عن طريق الوصول إلى محتويات ArrayList
.
ويستخدم المثال التالي فئة KeyValuePair
وهو حامل للبيانات (على غرار الطبقة Track
الخاص بك)، والتي سيتم استخدامها لتجميع <من أ href = "http://java.sun.com/javase/6/ مستندات / المعهد / javax / الأرجوحة / الجدول / DefaultTableModel.html "يختلط =" noreferrer "> DefaultTableModel
لعرض الجدول كما JTable
:
class KeyValuePair
{
public String key;
public String value;
public KeyValuePair(String k, String v)
{
key = k;
value = v;
}
}
// ArrayList containing the data to display in the table.
ArrayList<KeyValuePair> list = new ArrayList<KeyValuePair>();
list.add(new KeyValuePair("Foo1", "Bar1"));
list.add(new KeyValuePair("Foo2", "Bar2"));
list.add(new KeyValuePair("Foo3", "Bar3"));
// Instantiate JTable and DefaultTableModel, and set it as the
// TableModel for the JTable.
JTable table = new JTable();
DefaultTableModel model = new DefaultTableModel();
table.setModel(model);
model.setColumnIdentifiers(new String[] {"Key", "Value"});
// Populate the JTable (TableModel) with data from ArrayList
for (KeyValuePair p : list)
{
model.addRow(new String[] {p.key, p.value});
}
نصائح أخرى
وبعد ذلك، والمشكلة لدي هي أنني غير قادر على رؤية المشكلة على الإطلاق. وهنا رمز لقد استعملت لجعل واجهة:
public Interface(){
setSize(1024, 768);
setBackground(new Color(0,0,0));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new MenuBar());//simple JMenuBar implementation
table= new JTable();
table.setPreferredScrollableViewportSize(new Dimension(500, 500));
JScrollPane jsp = new JScrollPane(table);
add(jsp);
pack();
setVisible(true);
}
وبعد تنفيذ هذا الرمز، ولدي التعليمات البرمجية في فئة أخرى أن يفعل هذا عدة مرات:
((DefaultTableModel)mainInterface.table.getModel()).addRow(
new String[] {t.location,t.title,t.creator,t.album,t.genre,t.composer});
ور هو كائن المسار بالمناسبة.