добавить данные массива в JTable - PullRequest
1 голос
/ 30 декабря 2010

У меня есть ArreayList, который содержит данные класса PRIvariable (имя класса). Ниже показана моя часть кода Java. Итак, теперь я хочу поместить эти данные Arraylist в Jtable. Как мне это сделать. Здесь я уже добавил pri.dateText , pri.sum , pri.count к ar(arraylist)

PRIvariable pri=new PRIvariable();
   while (reader.ready()) {
             String line = reader.readLine();
             String[] values = line.split(",");
             if(values[2].equals(pri.incDate)){
                 if(values[4].equals("KI")){
             pri.dateText=values[2]+"    "+values[4];
             pri.count=pri.count+1;
             pri.sum = pri.sum+Integer.parseInt(values[7]);
         }
             }
         }
     System.out.println(pri.dateText+"  "+pri.sum+" "+pri.count);
     ar.add(pri);

Ответы [ 3 ]

3 голосов
/ 30 декабря 2010

Как и все компоненты Swing, JTable опирается на шаблон MVC (на нескольких уровнях, но это не предмет).

У вас есть одно представление (JTable), одна модель (я вернусь)позже) и контроллер (реализованный здесь как набор слушателей событий: один контроллер для каждого вида управления).

Массив, который вы имеете, может быть хорошей отправной точкой модели.Тем не менее, Swing предоставляет гораздо лучший способ внедрить ваши данные в JTable.Действительно, JTable использует в качестве модели реализацию TableModel.Надеемся, что уже существует реализация: DefaultTableModel.

Итак, вот что я предлагаю вам: создайте DefaultTableModel, поместите в его строки / столбцы все данные, которые вы хотите отобразитьв вашей таблице, затем позвоните JTable#setModel(TableModel), чтобы в этой таблице отображались ваши данные.

Очевидно, вы скоро найдете различные несоответствия между DefaultTableModel и тем, что вы хотите сделать.Тогда вам пора создать нашу собственную модель стола.Но это другой вопрос.

Кроме того, не забудьте взглянуть на Учебник по Swing , это обычно хорошо при работе с компонентами Swing.

1 голос
/ 31 декабря 2010

Просмотр GlazedLists . Они чрезвычайно облегчают создание подходящего объекта TableModel из вашего списка.

ArrayList< PRIvariable> myList = new ArrayList<PRIvariable>();
... fill up the list ...
// This assumes your object has a getName() and getAge() methods
String[] propertyNames = {"name","age"};
String[] columnLabels = {"Name","Age"};
// Are these columns editable?
boolean[] writeable = {false, false};

EventList<PRIvariable> eventList = GlazedLists.eventList(myList);
EventTableModel<PRIvariable> tableModel = new EventTableModel<PRIvariable>(eventList,propertyNames,columnLabels,writable);
JTable table = new JTable(tableModel);
1 голос
/ 30 декабря 2010

Я не вижу, где у вас есть ArrayList.

Сначала вы создаете объект PRIvariable.Затем вы продолжаете цикл, когда читаете строку данных из файла.Для каждой строки данных вы разбиваете ее на отдельные токены, а затем добавляете некоторые данные токенов в объект PRIvariable.Проблема в том, что у вас есть только один объект PRIVariable.Поэтому каждый раз, когда вы читаете новую строку данных, вы меняете значения объекта PRIvariable.После всех циклов вы добавляете этот единственный объект PRIvariable в ваш ArrayList, но у вас будет только один объект в ArrayList.

Более простое решение - обновить TableModel по мере получения данных.Что-то вроде:

DefaultTableModel model = new DefaultTableModel(...);
JTable table = new JTable( model );
...
...

while (reader.ready()) 
{              
    String line = reader.readLine();              
    String[] values = line.split(",");
    String[] row = new String[3];
    row[0] = values[?];
    row[1] = values[?];
    row[2] = values[?];
    model.addRow( row );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...