Java添加到表数据问题

时间:2011-08-30 18:21:22

标签: java swing jtable frame

有人能告诉我,我的错误在哪里? 我正在尝试用数据填充表,但我不能,总是得到空表。 这是我的框架代码:

import java.util.*;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;


public class Rinktis extends JFrame {
    private final JScrollPane scrollPane = new JScrollPane();
    private JTable table;

        public Rinktis() 
        {

        super();
        setBounds(100, 100, 861, 375);      
        try {
            jbInit();
        } catch (Throwable e) {
            e.printStackTrace();
        }       
    }

    Vector<Vector<String>> data1 =new Vector<Vector<String>>(); 
Vector<String> heading1 = new Vector<String>();
    public void tab(Vector heading, Vector data)
    {   System.out.println(data);
        System.out.println(heading);    
        data1=data;
        heading1=heading;
        System.out.println(data1);
        System.out.println(heading1);
    }   
    private void jbInit() throws Exception {
        getContentPane().setLayout(null);
        getContentPane().add(scrollPane);
        scrollPane.setBounds(10, 10, 825, 176);     

        table = new JTable(data1,heading1);
        scrollPane.setViewportView(table);
    }

}

以下是我从另一个框架调用它的方式:

    protected void rinktisButton_1_actionPerformed(ActionEvent e) 
{       Rinktis frame = new Rinktis();
        frame.setVisible(true); 
    try {
        db.getClients();
    } catch (Exception e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}

来自db.getClients();我致电rinktis.tab(columnHeads,v); System.out.println正确地为我提供了所有数据,但表格为空。

3 个答案:

答案 0 :(得分:2)

要获得严格的答案,您需要发布SSCCE。无论如何,您似乎将错误的类型传递给JTable constructor

你需要传递一个2d数组的对象(Object [][])或Vector<Vector<Object>>而不是普通的1D Vector,与TableHeader相同

我认为这是问题所在:

table = new JTable(data1, heading1); 
      //data1 need to of type Object[][] or Vector<Vector<Object>>
      //heading1 need to of type String[] or Vector<String>  

这是tutorial

答案 1 :(得分:2)

问题是该表不知道您更改了数据。您可以在创建表时加载数据。然后它应该显示就好了(也许先试试这个)。然后在第二步中,您应该直接使用tablemodel并在那里更改数据。无论何时这样做,您都可以通知表格进行更新。

或者,如果您已经知道标题,则可以设置标题,稍后再添加数据。这也应该有效。但是我不推荐这个。

答案 2 :(得分:2)

将标签功能更改为:

public void tab(Vector heading, Vector data)
    {       
        table.setModel(new DefaultTableModel(data,heading) );
    }