ما هي أسهل طريقة لعرض محتويات ArrayList الأجسام في JTable؟

StackOverflow https://stackoverflow.com/questions/623690

  •  05-07-2019
  •  | 
  •  

سؤال

ولدي ArrayList من الكائنات المسار. كل كائن المسار لديه المجالات التالية (جميع سلاسل):

والعنوان، العنوان، الخالق، الألبوم، النوع، الملحن

وأريد أن عرض هذه المسارات في JTable، مع كل صف يجري مثيل كائن المسار، وكل عمود يحتوي على إحدى خصائص كائن المسار.

وكيف يمكنني عرض هذه البيانات باستخدام JTable؟ لقد استخدمت AbstractTableModel التي تطبق طريقة getValueAt () بشكل صحيح. ومع ذلك، أنا لا أرى أي شيء على الشاشة.

وأم أنه أسهل فقط لاستخدام المصفوفات؟

هل كانت مفيدة؟

المحلول

في لإضافة محتويات لعرضه على JTable ، واحد يستخدم TableModel لإضافة عناصر لعرضه.

واحد من وسيلة لإضافة صف من البيانات إلى DefaultTableModel هو عن طريق استخدام في addRow طريقة التي سوف تتخذ مجموعة من Objects التي تمثل الكائنات في صف واحد. حيث لا توجد طرق لإضافة محتويات مباشرة من ArrayList، يمكن للمرء أن إنشاء مجموعة من Objects عن طريق الوصول إلى محتويات 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});

ور هو كائن المسار بالمناسبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top