JTable重复一行

时间:2017-05-08 04:45:07

标签: java swing 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

1 个答案:

答案 0 :(得分:2)

您发布的代码正在使用正确的数据 - 问题必须是数据。使用调试器进行检查,或仅用于测试,打印出data

的内容

可能同一个Vector被多次添加到data或每个Vector的内容相同(也许Patient对象使用static个字段?)

注意:我用来测试你的代码的数据 - 必须为每一行创建一个新的Vector:

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);

编辑:添加生成data代码后,很明显问题是,正如我上面所怀疑的那样:“正在添加相同的Vector”。

看看这部分:

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

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

    data.add(vector);
}

vector仅在循环外部创建一次,但在循环内多次添加。

解决方案:在循环中创建矢量

并且不需要额外的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