2014-01-09 78 views
0

我在做一個很基本的Java GUI應用程序。但我不知道我在這裏做錯了什麼。顯示多個陣列的JTable

這是我迄今所做的:

String[] colNames = { "QTY", "Item Code", "Amount" }; 

model = new DefaultTableModel(colNames, 0); 
JTable table = new JTable(model); 

String[] arrQty = {"2", "3", "10"}; 
String[] arrItemCode = {"Item 1", "Item 2", "Item 3"}; 
String[] arrAmount = {"100", "200", "80"}; 
String f_qty, f_itemcode, f_amount;  

for(String arrAmt: arrAmount){ 
    f_amount = arrAmt; 
} 

for(String arrQt : arrQty){ 
    f_qty = arrQt; 
} 

for(String arrItem : arrItemCode){ 
    f_itemcode = arrItem; 
} 

model.addRow(new Object[]{ f_qty, f_itemcode, f_amount }); 

但它不會讓我,因爲編譯器需要首先初始化字符串,我怎樣才能解決這個問題?有任何想法嗎?

回答

1

爲了遍歷所有數組值的數組必須有相同的長度,或者你可能會得到一個ArrayIndexOutOfBoundsException或錯過一些值。

因此,我會首先介紹一個檢查,可以更容易地找到不同數組長度的問題。

String[] arrQty = { "2", "3", "10" }; 
String[] arrItemCode = { "Item 1", "Item 2", "Item 3" }; 
String[] arrAmount = { "100", "200", "80" }; 

if (arrQty.length != arrItemCode.length || arrQty.length != arrAmount.length) { 
    throw new IllegalStateException("All arrays must have the same length." 
            + "arrQty[" + arrQty.length 
            + "], arritemCode[" + arrItemCode.length 
            + "], arrAmount[" + arrAmount.length + "]"); 
} 

之後,您可以安全地遍歷字符串數組並將行添加到表模型。

for (int i = 0; i < arrQty.length; i++) { 
    model.addRow(new Object[] { arrQty[i], arrItemCode[i], arrAmount[i]}); 
} 
2

修復被初始化Stringnull或者爲空或任意字符串

String f_qty= null, f_itemcode =null, f_amount =null;  

第二點是,你的邏輯似乎是錯誤的。迭代完成後,您將該值設置爲表格。它應該是?

for(int i=0; i< arrQty.length; i++) { 
    model.addRow(new Object[]{ arrQty[i], arrItemCode[i], arrAmount[i}); 
} 
+0

+1刪除我的答案,這將每OP的要求就夠了:) – PopoFibo

+0

@sanbhat感謝。但讓我問問這是否有效?如果arrqty只有2個元素,而其他數組有2個以上的元素? – Dunkey

2

爲了初始化這個變量,你可以用下一行:

String f_qty="", f_itemcode="", f_amount="";  

,但似乎對我來說,你只需要下一步:

DefaultTableModel model = new DefaultTableModel(colNames, 0); 
JTable table = new JTable(model); 

String[] arrQty = {"2", "3", "10"}; 
String[] arrItemCode = {"Item 1", "Item 2", "Item 3"}; 
String[] arrAmount = {"100", "200", "80"}; 

for(int i=0;i<arrQty.length;i++){ 
    model.addRow(new Object[]{ arrQty[i], arrItemCode[i], arrAmount[i] }); 
} 

和結果將是:

enter image description here

+0

謝謝!這解決了我的問題。但是這種方法是否有效?我的意思是,如果數量只有2個元素,而另一個陣列有5個元素? – Dunkey

+0

我想你需要自己管理,因爲只有你知道如果數組長度不同,需要顯示什麼。 – alex2410

0

null初始化您String變量。

0

使用如下:

創建對象的初始空2D陣列:

對象[] [] rowData = {};

創建數據模型如下:

模型=新的DefaultTableModel(rowData,colNames);

填寫該表爲您的需要。