arraylistがあり、arrayListの各要素にはデータの小さなarrayListが含まれています。
このデータからテーブルを作成する必要があります。これを解決するための最良のルートとなることをお勧めしますか?
助けてくれてありがとう
テーブルモデルの作成方法を参照してください
モデルを作成し、オブジェクトをモデルに保存する方法を示す小さな例。データに対する操作はすべて、モデルを使用して実行する必要があります。
モデルを作成し、リストを使用してそのテーブルのデータを保存します。以下の例に示すように。テーブルの各行はStudent
オブジェクトであり、各オブジェクトはリストに格納されます。リストをトラバースして各オブジェクトを取得し、テーブルに表示します。これはgetValueAt(..)
メソッドを使用して行われます。
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;
}
}
リストのリストの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を実装する方法を紹介できます。
これを行うには、リストテーブルモデルを使用できます。
これは、このスレッドで提供された以前の提案を実装する、より複雑で柔軟なソリューションです。