以正确的顺序向JTable添加行。

时间:2012-12-04 22:32:33

标签: java swing object arraylist jtable

我正在编写一个代码,其中从数组的arraylist收集数据,我将其添加到JTable中。但是,代码总是将数据添加到底部,因此如果有两行数据,则将它们添加到最后两行,而不是前两行。这是相关代码,

public class RegistrationView extends GUIDesign implements ActionListener {

//variable declarations here. 

public RegistrationView (GTPort gport){

    super("Student Report", 3);

    gtPort = gport;

    setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));
    setPreferredSize(new Dimension(500,800));

    header = new JPanel();
    header.setSize(getWidth(), 30);
    body = new JPanel();
    body.setLayout(new BoxLayout(body,BoxLayout.Y_AXIS));

    header.setBackground(color);
    title.setFont(new Font("Helvetica", 1,20));
    header.add(title);

    data = new Object[15][4];

    model = new DefaultTableModel(data, columns);

    table = new JTable(model);


    body.add(table.getTableHeader()); 
    body.add(table);


    backButton.addActionListener(this);
    buttonPanel.add(backButton);

    buttonPanel.add(backButton);
    add(header);
    add(body);
    add(buttonPanel);

}

public void refresh()
{
           //this is the data to be added. it is an arraylist of object arrays. 
    ArrayList<Object[]> selectedData = gtPort.selectedData;

           //i use this code to erase all the data in the table, if there is any. this                   //method may be called later, so the data must be erased. 
    model.setRowCount(0);
    table = new JTable(model);
    model.setRowCount(35);

    //adding the rows to the model, which is then added to the table. 

    for (Object[] objects: selectedData)
    {
        model.addRow(objects);


    }

    table = new JTable(model);



}

//感谢。

3 个答案:

答案 0 :(得分:7)

model.addRow(objects);更改为model.insertRow(0, objects);

答案 1 :(得分:1)

通过将行计数设置两次,将元素添加到JTable后,看起来好像要添加行。它应该为您填充,而不必设置行计数。要在更改后刷新您的表格,请尝试使用fireTableDataChanged();并查看有关如何正确构建布局的http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

答案 2 :(得分:1)

在表格底部添加行,因为如果您使用javadoc中所述的.. addRow(..) method,则DefaultTableModel将在末尾添加行。使用insertRow(..)方法在特定位置插入行。但请注意ArrayOutOfBoundException.

如javadoc中所述,

 public void insertRow(int row, Object[] rowData)

在模型中的行处插入一行。除非指定了rowData,否则新行将包含空值。将生成正在添加的行的通知。

 public void addRow(Object[] rowData)

在模型的末尾添加一行。除非指定了rowData,否则新行将包含空值。将生成正在添加的行的通知。