0

arraylistがあり、arrayListの各要素にはデータの小さなarrayListが含まれています。

このデータからテーブルを作成する必要があります。これを解決するための最良のルートとなることをお勧めしますか?

助けてくれてありがとう

4

3 に答える 3

3

テーブルモデルの作成方法を参照してください

モデルを作成し、オブジェクトをモデルに保存する方法を示す小さな例。データに対する操作はすべて、モデルを使用して実行する必要があります。

モデルを作成し、リストを使用してそのテーブルのデータを保存します。以下の例に示すように。テーブルの各行はStudentオブジェクトであり、各オブジェクトはリストに格納されます。リストをトラバースして各オブジェクトを取得し、テーブルに表示します。これはgetValueAt(..)メソッドを使用して行われます。

JTableモデルの例

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<Student> data;
    String[] columnNames = {"Name", "Age"};

    public CustomModel() {
        data = new ArrayList<Student>();

        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;
    }
}
于 2013-02-07T14:56:41.577 に答える
1

リストのリストのGUIテーブルを表示するには、「TableModel」インターフェイスを実装し、「List>」を取り込むコンストラクターを持つクラスを作成します。

public class ListTableModel <T> implements TableModel {

    private List<List<T>> source;

    public ListTableModel(List<List<T>> 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<T> 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<T> 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<List<String>> myList = new ArrayList();

//Populate 'myList'...

JTable table = new JTable();

//Add table to view...

table.setModel(new ListTableModel(myList));

編集必要に応じて、TableModelを実装する方法を紹介できます。

于 2013-02-07T14:43:14.070 に答える
1

これを行うには、リストテーブルモデルを使用できます。

これは、このスレッドで提供された以前の提案を実装する、より複雑で柔軟なソリューションです。

于 2013-02-07T16:41:52.887 に答える