2017-05-08 72 views
-1

我創建了JTable並將列標題和數據插入表中。JTable重複一行

  • data是矢量的矢量
  • column_header是串的矢量

這是代碼:

Vector<Diagnosis_data> Arraylist_object = new Vector<Diagnosis_data>(); 
Vector<Vector<Object>> data = new Vector<Vector<Object>>(); 

Diagnosis_data d1 = new Diagnosis_data("92992","1",1422-09-09,1422-09-18,E11.9,"Type 2 diabetes mellitus without complications"); 
Diagnosis_data d2 = new Diagnosis_data("8199111","2",1415-09-09,1415-09-18,E11.622,"Type 2 diabetes mellitus with other skin ulcer"); 

Arraylist_object.add(d1); 
Arraylist_object.add(d2); 

int f = 0; 
while(f < Arraylist_object.size()) 
{ 
    Vector<Object> vector = new Vector<Object>(); 

    for(; f < Arraylist_object.size() ; f++) 
    { 
     vector.add(Arraylist_object.get(f).patient_ID); 
     vector.add(Arraylist_object.get(f).Ad_ID); 
     vector.add(Arraylist_object.get(f).Ad_start); 
     vector.add(Arraylist_object.get(f).Ad_End); 
     vector.add(Arraylist_object.get(f).Diagnosis_code); 
     vector.add(Arraylist_object.get(f).Diagnosis_Des); 

     data.add(vector); 
    } 
} 


DefaultTableModel tableModel = new DefaultTableModel(data,column_header); 

JTable table_2 = new JTable(tableModel); 
JScrollPane scrollPane = new JScrollPane(table_2); 

scrollPane.setBounds(1, 1, 1050, 500); 
panel_1.add(scrollPane); 

結果是:

enter image description here

+0

1)爲了更好地提供幫助,請發佈[MCVE]或[簡短自包含正確示例](http://www.sscce.org/)。顯然(我希望)刪除GUI頂部的所有不相關的文件。 2)你描述了一個問題,但沒有提出任何問題。你的問題是什麼? 3)'scrollPane.setBounds(1,11050,500);'Java GUI必須在不同的操作系統上工作',屏幕大小,屏幕分辨率等等,使用不同語言環境中的不同PLAF。因此,它們不利於像素的完美佈局。而是使用佈局管理器,.. –

+0

..或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及佈局填充和邊框[white space](http://stackoverflow.com /一個/418556分之17874718)。 –

+0

*「我的回答被編輯以反映添加的代碼」*我建議發佈一個MCVE/SSCCE。你不明白什麼? –

回答

2

您發佈的代碼正在提供正確的數據 - 問題必須是數據。使用調試器來檢查它,或者僅用於測試,打印出data的內容。

可能是相同的矢量被添加到data多次或每個向量的內容是相同的

注:數據我用來測試你的代碼 - (也許病人對象是使用static場?)

Vector<Vector<?>> data = new Vector<>(); 
Vector<String> column_header = new Vector<>(); 

column_header.addAll(Arrays.asList("A", "B", "C")); 

Vector<String> row; 
row = new Vector<>(); 
row.addAll(Arrays.asList("11", "12", "13")); 
data.add(row); 
row = new Vector<>(); 
row.addAll(Arrays.asList("21", "22", "23")); 
data.add(row); 
row = new Vector<>(); 
row.addAll(Arrays.asList("31", "32", "33")); 
data.add(row); 

編輯:新的Vector必須爲每一行創建的生成data代碼被添加之後,很明顯的問題是,正如我上面的猜測:「山姆e矢量正被添加「。

看這個部分:

Vector<Object> vector = new Vector<Object>(); 

for(; f < Arraylist_object.size() ; f++) 
{ 
    vector.add(...); 

    data.add(vector); 
} 

vector僅創建一次OUTSIDE循環,但是添加多時間內循環。

解決方案:創建矢量內環路

而且也沒有必要額外while,實際上該公約是聲明在for循環變量(和使用i作爲計數器):

for(int i = 0; i < Arraylist_object.size() ; i++) 
{ 
    Vector<Object> vector = new Vector<Object>(); 

    vector.add(Arraylist_object.get(i).patient_ID); 
    ... 

    data.add(vector); 
} 

或使用foreach

for (Diagnosis_data diagnosis : Arraylist_object) 
{ 
    Vector<Object> vector = ... 
    vector.add(diagnosis.patient_ID); 
    vector.add(diagnosis.Ad_ID); 
    ... 
} 

  

建議:花一些時間學習使用調試器,如果你想進行嚴肅的編程,它不會被浪費。

建議2:如Andrew Thompson所述,使用LayoutManager來代替使用常量座標來佈置組件。教程:Laying Out Components Within a Container

+0

親愛的卡羅爾 - 那麼你的回放是如此之多..我通過打印測試數據它包含了一個好的向量,具有相同的排序...這是填充向量的代碼 – monaalhumud

+0

int f = 0; \t \t而(F 矢量=新向量(); \t \t \t爲(;˚F monaalhumud

+0

** 1)**上面應包括在原來的職位(至少是可讀的)** 2)**它不完全似乎仍然 - 什麼是Arraylist_object更重要的是,它的內容 - 也應該是帖子的一部分** 3)在內部循環中打印出Arraylist_object.get(f).patient_ID'來驗證它(使用調試器會更有效率) –