我正在处理涉及具有动态列数的JTable的工作项目。每列基本上都是一个单独的事务,但我不知道文件提前完成的事务数。
通常当我创建JTable时,我知道我将拥有多少列,并且我将其声明为:
String header[] = new String[]{
"Tag","Transaction1"
};
对于这个项目,每次使用程序时都可以有任意数量的事务,所以我需要在创建行之前根据某个数组的长度动态添加列。 (第一行实际上也将用作标题)。
所以我有一个给定长度的数组,但我不知道如何在循环中使用这个值,至少不是创建像上面代码所示的对象。
例如,让我们说用户上传一个有3个交易的文件..我需要我的String header []来读取:
String header[] = new String[]{
"Tag","Transaction1","Transaction2","Transaction3"
};
我考虑过可能创建一个数组列表并使用计数器和循环将事务添加到此,然后可能将值提取到String []标题中,尽管我不确定这是否是最好的方法,甚至仍然是如何使其工作。
答案 0 :(得分:3)
我实际上找到了答案..显然我需要废弃整个阵列并像这样添加它们。
DefaultTableModel tableModel = new DefaultTableModel();
for(String columnName : columnNames){
tableModel.addColumn(columnName);
}
jTable.setModel(tableModel);
答案 1 :(得分:2)
一个不错的选择是让ArrayList
动态添加或删除列表中的元素。
然后,在必要时,您可以将ArrayList
转换为字符串数组,例如..
ArrayList<String> elements = new ArrayList<String>();
elements.add("Transaction 1");
elements.add("Transaction 2");
elements.add("Transaction 3");
Object[] elementArray = elements.toArray();
答案 2 :(得分:1)
我不需要使用数组,使用更好的List,这是因为您可以根据需要增加大小,迭代它,将其解析为字符串数组等。
List<String> transactions = new ArrayList<String>();
transactions.add("Tag");
// later
transactions.add("Transaction1");
transactions.add("Transaction2");
// print it
for (final String string : transactions) {
System.out.println(string);
}
答案 3 :(得分:1)
List<String> headerList = new ArrayList<>();
headerList.add("Tag");
for(int i=1; i <= transactions.length; i++){
headerList.add("Transaction" + i);
}
String[] header = headerList.toArray(new String[headerList.size()]);
答案 4 :(得分:1)
我相信你要找的是ArrayList,而不是数组和列表,因为这允许动态分配。
语法为:
List<String> header = new ArrayList<String>();
header.add("Tag");
初始化它。然后,使用length()类中的File为循环设置参数,然后使用“Transaction”+循环索引将字符串连接的结果动态添加到ArrayList。
看起来像是:
for (int i = 1; i <= file.length(); i++){
header.Add("Transaction" + i);
}
然后,您可以将其转换回字符串数组:
String[] headerArray = header.toArray(new String[header.size()]);