Отобразить массивList из списков массивов в JTable

У меня есть arraylist, и каждый элемент arrayList содержит небольшой массив данных.

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

Заранее благодарю за любую помощь

0
nl ja de
Что содержит внутренний список? Он содержит объекты?
добавлено автор Amarnath, источник
Вы хотите отобразить текстовую таблицу или таблицу GUI?
добавлено автор souldzin, источник
Таблица GUI, спасибо
добавлено автор Hoggie1790, источник
Он содержит строки
добавлено автор Hoggie1790, источник

3 ответы

See How to create a Table Model

Небольшой пример, показывающий, как создать модель и сохранить ваши объекты в модели. Любая операция над данными должна выполняться с использованием модели.

Создайте модель и используйте список для хранения данных для этой таблицы. Как показано в приведенном ниже примере. Каждая строка в таблице представляет собой объект Student , и каждый объект сохраняется в списке. Пройдите список и получите каждый объект и покажите его в таблице. Это делается с помощью метода getValueAt (..) .

JTable Model Example

import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;


public class JTableList {
    public static void main(String[] args) {

        Runnable r = new Runnable() {

            @Override
            public void run() {
                CustomModel model = new CustomModel();
                JTable table = new JTable();
                table.setModel(model);

                JFrame frame = new JFrame();
                frame.add(new JScrollPane(table));
                frame.pack();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);             
            }
        };

        EventQueue.invokeLater(r);
    }

}

class CustomModel extends AbstractTableModel {

    List data;
    String[] columnNames = {"Name", "Age"};

    public CustomModel() {
        data = new ArrayList();

        data.add(new Student("Amar", 1));
        data.add(new Student("Sam", 2));
        data.add(new Student("Amar", 1));
        data.add(new Student("Sam", 2));
        data.add(new Student("Amar", 1));
        data.add(new Student("Sam", 2));


    }

    @Override
    public String getColumnName(int column) {
        return columnNames[column];
    }

    @Override
    public int getColumnCount() {
        return 2;
    }

    @Override
    public int getRowCount() {
        return data.size();
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Student student = data.get(rowIndex);
        switch (columnIndex) {
        case 0:
            return student.getName();
        case 1:
            return student.getAge();
        default:
            return null;
        }
    }

}

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
3
добавлено

Для этого можно использовать таблицу таблицы табуляции .

Это более сложное и гибкое решение, реализующее более ранние предложения, приведенные в этом потоке.

1
добавлено

To display a GUI table of a List of lists, I would create a class that implements the 'TableModel' interface, and has a constructor that takes in your 'List>'

public class ListTableModel  implements TableModel {

    private List> source;

    public ListTableModel(List> source) {

        this.source = source;

    }


    //Override 'getRowCount' 
    //The row count would be calculated as the size of the outer list.
    @Override
    public int getRowCount() {
        return source.size();
    }

    //Override 'getColumnCount'
    //The column count would be calculated as the max size of the inner lists
    @Override
    public int getColumnCount() {
        int max = 0;
        for(List row : source) {
            max = Math.max(max, row.size());
        }
        return max;
    }

    //Override 'getColumnName'
    //Lets go ahead and just give a unique name to each column based on the index.
    //This could be populated from an input taken by the constructor, but we
    //won't worry about that now.
    @Override
    public String getColumnName(int columnIndex) {
        return "Column " + columnIndex;
    }

    //Override 'getColumnClass'
    //The class would technically be the generic type 'T', so to get this we 
    //will simply just get the calss of the first element.
    @Override
    public Class<?> getColumnClass(int columnIndex) {
        return source.get(0).get(0).getClass();
    }


    //Override 'isCellEditable'
    //I'm going to assume we don't want cell to be editable.
    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return false;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        List row = source.get(rowIndex);
        if(columnIndex >= row.size())
            return null;
        else 
            return row.get(columnIndex);
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        //required but we will assume that you cannot change the source list
        //if we needed to, it wouldn't be too difficult to implement.
    }

    @Override
    public void addTableModelListener(TableModelListener l) {
        //required but not used (will only be used if the source could change)
    }

    @Override
    public void removeTableModelListener(TableModelListener l) {
        //required but not used (will only be used if the source could change)
    }

}

вы бы использовали эту модель со своим списком:

List> myList = new ArrayList();

//Populate 'myList'...

JTable table = new JTable();

//Add table to view...

table.setModel(new ListTableModel(myList));

EDIT Я могу показать вам, как реализовать TableModel, если хотите.

1
добавлено
@ user2029412 Я изменил код для реализации TableModel. Это очень простая реализация, и я бы рекомендовал взглянуть на пример создания модели таблицы Table. Кстати, великое дело в создании такого класса, это то, что вы можете использовать его в любом из своих проектов!
добавлено автор souldzin, источник
Было бы здорово, если бы вы могли дать нам быстрый урок о том, как реализовать TableModel! Большое спасибо.
добавлено автор Hoggie1790, источник
Отлично! Большое спасибо, я отдам его. Я действительно приветствую помощь
добавлено автор Hoggie1790, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async