我有一个代码,当我输入值itr.get(0),str.get(0)
等时我得到数据...但我想创建一个for循环但我不能使用它,因为它内部的model.addRow
并且每个都有不同的大小array list object(itr,str,dub)
。
如何通过for循环输入数据,因此我不必手动调用它。
public Data1()
{
super();
setDefaultCloseOperation(EXIT_ON_CLOSE);
JTable table = new JTable(new DefaultTableModel(new Object[]{"Integers", "RealNumbers","OtherTokens"},5));
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.addRow(new Object[]{itr.get(0),dub.get(0) ,str.get(0) });
model.addRow(new Object[]{itr.get(1),dub.get(1) ,str.get(1) });
model.addRow(new Object[]{itr.get(2),dub.get(2) ,str.get(2) });
model.addRow(new Object[]{itr.get(3), "" ,str.get(3) });
model.addRow(new Object[]{itr.get(4), "" ,str.get(4) });
model.addRow(new Object[]{"", "" ,str.get(5) });
table.setPreferredScrollableViewportSize(new Dimension(500,80));
JScrollPane pane = new JScrollPane(table);
getContentPane().add(pane,BorderLayout.CENTER);
}
答案 0 :(得分:1)
原始问题是关于在表中添加循环。然而,真正的问题不是循环本身,而是存在不同类型的不同数量的元素的事实。这个答案采用了聊天中提供的一些数据,并将其放入数组中。它可以从文件中读出。它通过在数组中放置一个空字符串来解决在没有数据的情况下放入给定行的问题。
方法是使用TableModel
而不是尝试添加单个镜头。但是,如果需要,可以构造必要的数组,并将其传递给构造函数。但是,从长远来看,TableModel
是一种更好的方法,恕我直言。
public static void main(String[] args)
{
// these three arrays represent the test data otherwise read
// from a file
int[] ia = { 1493, -832722, 0, 1, 162 };
double[] da = { 0.4, -6.382, 9.0E-21 };
String[] sa = { "The", "fox", "jumped", "over", "the", "dog!"};
Object[] columnNames = { "Int", "Real", "Tokens" };
DefaultTableModel dm = new DefaultTableModel(columnNames, 0);
JTable tbl = new JTable(dm);
// while reading for a file, would know the max length in
// a different way
int loopCtr = Math.max(ia.length, da.length);
loopCtr = Math.max(loopCtr, sa.length);
// loop for the longest entry; for each entry decide if there
// is a value
for (int i = 0; i < loopCtr; ++i) {
Integer iv = (i < ia.length ? ia[i] : null);
Double dv = (i < da.length ? da[i] : null);
String sv = (i < sa.length ? sa[i] : "");
//add the row; if no value for a given entry, use an empty
// String
dm.addRow(new Object[]{(iv != null ? iv : ""),
(dv != null ? dv : ""),
sv});
}
//just output for the moment
int cols = dm.getColumnCount();
int rows = dm.getRowCount();
StringBuilder sb = new StringBuilder();
for (int row = 0; row < rows; ++row) {
sb.setLength(0);
for (int col = 0; col < cols; ++col) {
sb.append(dm.getValueAt(row, col));
sb.append("\t");
}
System.out.println(sb.toString());
}
}
输出演示了一个根据需要显示空白的表。
1493 0.4 The
-832722 -6.382 fox
0 9.0E-21 jumped
1 over
162 the
dog!