我搜索了一段时间,但我无法找到解决问题的方法。
我想在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<String> rowA = new ArrayList();
private static ArrayList<String> rowB = new ArrayList();
private static ArrayList<String> rowC = new ArrayList();
private static ArrayList<String> titel = new ArrayList();
private static ArrayList<Object> 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
中的第一个值,但我不知道应该怎么做。
谢谢大家试图回答我的问题。
修改
我的目标是使用
创建一个列表实体名称,变革艺术,日期
所以我认为使用ArrayList是最好的,因为它很灵活。 它必须是灵活的,因为我们不知道用户将改变多少。
答案 0 :(得分:5)
您应该为表创建自定义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> data = new ArrayList<Data>();
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;
}
}
这就是结果:
答案 1 :(得分:2)
从那以后,JTable
没有ArrayList
的保留参数,但是一个技巧可以解决它!您知道JTable
的论据也是(Object[][], object[])
Object[] tempTitel = titel.toArray(); // return Object[]
String[][] tempTable = new String[table.size()][];
int i = 0;
for (List<String> next : table) {
tempTable[i++] = next.toArray(new String[next.size()]); // return Object[][]
}
JTable EndTable = new JTable(tempTable,tempTitel);
请注意,我将ArrayList<String> table= new ArrayList()
更改为ArrayList<ArrayList<String>> 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<String> rowA = new ArrayList();
private static ArrayList<String> rowB = new ArrayList();
private static ArrayList<String> rowC = new ArrayList();
private static ArrayList<String> titel = new ArrayList();
private static ArrayList<ArrayList<String>> 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<String> 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);
}
}
答案 2 :(得分:0)
也许你应该发布你的错误。
我可以从Java API中的JTable
构造函数中看到它不会将ArrayList
作为参数。
JTable(Object [] [] rowData,Object [] columnNames)构造一个JTable 显示二维数组中的值rowData,with 列名,columnNames。
也许您应该尝试使用原始arrays
?