2017-05-08 41 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'来验证它(使用调试器会更有效率) –