使用ArrayList创建jTable

我搜索了一会儿,但我无法找到解决问题的方法。

我想在JTable中显示ArrayList的值,我对此很新,并且无法修复错误。

package Statistik; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; public class Statistic { private static ArrayList rowA = new ArrayList(); private static ArrayList rowB = new ArrayList(); private static ArrayList rowC = new ArrayList(); private static ArrayList titel = new ArrayList(); private static ArrayList table = new ArrayList(); public static void main(String[] args) { titel.add("Name"); titel.add("Art der Bearbeitung"); titel.add("Datum"); addRows("buchung", "Created", "10.10.10"); addRows("buchung", "Created", "10.10.10"); addRows("buchung", "Created", "10.10.10"); addRows("buchung", "Created", "10.10.10"); addRows("buchung", "Created", "10.10.10"); table.add(rowA); table.add(rowB); table.add(rowC); // Das JTable initialisieren JTable EndTable = new JTable( table , titel ); JFrame frame = new JFrame( "Demo" ); frame.getContentPane().add(new JScrollPane( EndTable ) ); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frame.pack(); frame.setVisible( true ); } public static void addRows(String rowa, String rowb, String rowc) { rowA.add(rowa); rowB.add(rowb); rowC.add(rowc); } } 

我不能将ArrayList table设置为我的EndTable第一个值,但我不知道我应该怎么做。

谢谢大家试图回答我的问题。

编辑

我的目标是制作一个List

实体名称,变革艺术,日期

所以我认为使用ArrayList是最好的,因为它很灵活。 它必须是灵活的,因为我们不知道用户将改变多少。

不,从那以后, JTable没有为ArrayList保留参数,但一个技巧将解决它! 你知道JTable的参数也是(Object[][], object[])

  Object[] tempTitel = titel.toArray(); // return Object[] String[][] tempTable = new String[table.size()][]; int i = 0; for (List next : table) { tempTable[i++] = next.toArray(new String[next.size()]); // return Object[][] } JTable EndTable = new JTable(tempTable,tempTitel); 

请注意,我将ArrayList table= new ArrayList()更改为ArrayList> table = new ArrayList(); 所以当它结合起来时:

 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; public class Statistic { private static ArrayList rowA = new ArrayList(); private static ArrayList rowB = new ArrayList(); private static ArrayList rowC = new ArrayList(); private static ArrayList titel = new ArrayList(); private static ArrayList> table = new ArrayList(); public static void main(String[] args) { titel.add("Name"); titel.add("Art der Bearbeitung"); titel.add("Datum"); addRows("buchung", "Created", "10.10.10"); addRows("buchung", "Created", "10.10.10"); addRows("buchung", "Created", "10.10.10"); addRows("buchung", "Created", "10.10.10"); addRows("buchung", "Created", "10.10.10"); table.add(rowA); table.add(rowB); table.add(rowC); Object[] tempTitel = titel.toArray(); String[][] tempTable = new String[table.size()][]; int i = 0; for (List next : table) { tempTable[i++] = next.toArray(new String[next.size()]); } JTable EndTable = new JTable(tempTable,tempTitel); JFrame frame = new JFrame("Demo"); frame.getContentPane().add(new JScrollPane(EndTable)); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } public static void addRows(String rowa, String rowb, String rowc) { rowA.add(rowa); rowB.add(rowb); rowC.add(rowc); } } 

您应该为表创建自定义TableModel,请参阅以下链接以获取更多详细信息Custom JTable Model

以下是一些代码:

 import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.AbstractTableModel; public class Test extends JFrame { public Test() { setBounds(100, 100, 500, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JTable table = new JTable(new ModelData()); add(new JScrollPane(table)); setVisible(true); } public static void main(String[] args) { new Test(); } } class ModelData extends AbstractTableModel { List data = new ArrayList(); String colNames[] = { "Name", "Type", "Date" }; Class colClasses[] = { String.class, String.class, Date.class }; ModelData() { data.add(new Data("name 1", "type 1", new Date())); data.add(new Data("name 2", "type 2", new Date())); data.add(new Data("name 3", "type 3", new Date())); } public int getRowCount() { return data.size(); } public int getColumnCount() { return colNames.length; } public Object getValueAt(int rowIndex, int columnIndex) { if (columnIndex == 0) { return data.get(rowIndex).getName(); } if (columnIndex == 1) { return data.get(rowIndex).getType(); } if (columnIndex == 2) { return data.get(rowIndex).getDate(); } return null; } public String getColumnName(int columnIndex) { return colNames[columnIndex]; } public Class getColumnClass(int columnIndex) { return colClasses[columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return true; } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { if (columnIndex == 0) { data.get(rowIndex).setName((String) aValue); } if (columnIndex == 1) { data.get(rowIndex).setType((String) aValue); } if (columnIndex == 2) { data.get(rowIndex).setDate((Date) aValue); } fireTableCellUpdated(rowIndex, columnIndex); } } class Data { String name; String type; Date date; public Data(String name, String type, Date date) { super(); this.name = name; this.type = type; this.date = date; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } } 

这就是结果:

在此处输入图像描述

也许你应该发布你的错误。 我可以从Java API中的JTable构造函数看到它不将ArrayList作为参数。

JTable(Object [] [] rowData,Object [] columnNames)构造一个JTable,以显示二维数组rowData中的值,列名为columnNames。

也许你应该尝试使用原始arrays