JTable заполняется из ArrayList - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь заполнить JTable из ArrayList.

Список массивов имеет тип Record, который я определил ниже:

public class Record {

    int Parameter_ID;
    int NDC_Claims;
    int NDC_SUM_Claims;

    public Record(int parameter, int claims, int ndc_sum_claims){
        Parameter_ID = parameter;
        NDC_Claims = claims;
        NDC_SUM_Claims = ndc_sum_claims;

    }

    public Record() {
        // TODO Auto-generated constructor stub
    }

Я не знаю, как заполнять таблицу заголовками столбцов. Это то, что я до сих пор:

DefaultListModel listmodel = new DefaultListModel();
ArrayList<Record> test = new ArrayList<Record>();
DefaultTableModel modelT = new DefaultTableModel();
    Object data1[] = new Object[3];

    for(int i=0;  i<test.size();i++){
        data1[0] = test.get(i).Parameter_ID;
        data1[1] = test.get(i).NDC_SUM_Claims;
        data1[2] = test.get(i).NDC_Claims;
        modelT.addRow(data1);
    }

table_1 = new JTable(modelT, columnNames);
contentPane.add(table_1, BorderLayout.CENTER);
contentPane.add(table_1.getTableHeader(), BorderLayout.NORTH);

Ничего не выводится. Любая помощь будет отличной!

Ответы [ 2 ]

0 голосов
/ 20 июля 2018

Вы можете создать пользовательский AbstractTableModel , а затем создать JTable, используя эту модель. Вот класс обработки ArrayList of Arrays:

import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

public class DataTableModel<T> extends AbstractTableModel {

/**
 * Benjamin Rathelot
 */
private static final long serialVersionUID = -7361470013779016219L;
private ArrayList<T[]> data = new ArrayList<T[]>();
private String[] tableHeaders;



public DataTableModel(ArrayList<T[]> data, String[] headers) {
    super();
    this.data = data;
    this.tableHeaders = headers;
}

@Override
public int getRowCount() {

    return data.size();
}

@Override
public int getColumnCount() {

    if(data.size()>0) return data.get(0).length;
    return 0;
}

@Override
public Object getValueAt(int arg0, int arg1) { 
    // TODO Auto-generated method stub
    if(data.size()>=arg0) {
        if(data.get(arg0).length>=arg1) {
            return data.get(arg0)[arg1];
        }
    }
    return null;
}

@Override
 public String getColumnName(int columnIndex) {
  return tableHeaders[columnIndex];
 }

}
0 голосов
/ 06 июля 2018

Ну, вам нужно начать с чтения API. Вы не можете программировать, если сначала не читаете API.

DefaultTableModel modelT = new DefaultTableModel();

Когда вы читаете API, что делает этот конструктор? Создает модель с 0 строками и 0 столбцами. Вы захотите создать модель с 3 столбцами и 0 строками, чтобы можно было добавлять строки данных в модель. Прочитайте DefaultTableModel API

table_1 = new JTable(modelT, columnNames);

Что делает этот устав? Я не вижу конструктора, который позволял бы вам указывать имена моделей и столбцов, так как компилируется ваш код. Вы просто хотите создать таблицу, используя модель.

contentPane.add(table_1, BorderLayout.CENTER);
contentPane.add(table_1.getTableHeader(), BorderLayout.NORTH);

Таблица должна быть добавлена ​​в область просмотра JScrollPane. Заголовок будет отображаться как заголовок столбца панели прокрутки.

Прочитайте JTable API. API также содержит ссылку на учебник по Swing на How to Use Tables, который вам необходимо прочитать для ознакомления с основами.

ArrayList<Record> test = new ArrayList<Record>();

Вы создаете пустой ArrayList. Итак, что вы ожидаете, когда будете повторять цикл? Как добавить данные в модель, если в ArrayList нет данных?

Кроме того, вы искали на форуме / в Интернете примеры, использующие классы DefaultTableModel или JTable. Эти примеры помогут вам написать свой код.

...