3

JTable に追加する配列の arraylist からデータを収集するコードを書いています。ただし、コードは常に下側を上にしてデータを追加するため、データが 2 行ある場合は、最初の 2 行ではなく、最後の 2 行に追加されます。これが関連コードです。

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



}

//ありがとう。

4

3 に答える 3

10

に変更model.addRow(objects);model.insertRow(0, objects);ます。

于 2012-12-04T22:38:50.677 に答える
1

javadocに記載されているように..addRow(..)メソッドを使用すると、DefaultTableModelが最後に行を追加するため、テーブルの下部に行を追加します。insertRow(..)メソッドを使用して、特定の場所に行を挿入します。ただし、ArrayOutOfBoundExceptionに注意してください。

javadocに記載されているように、

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

モデルの行に行を挿入します。rowDataが指定されていない限り、新しい行にはnull値が含まれます。追加される行の通知が生成されます。

 public void addRow(Object[] rowData)

モデルの最後に行を追加します。rowDataが指定されていない限り、新しい行にはnull値が含まれます。追加される行の通知が生成されます。

于 2012-12-05T07:53:23.827 に答える
1

行数を 2 回設定して JTable に要素を追加した後、行を追加しているように見えます。行数を設定するのではなく、自動的に入力する必要があります。変更後にテーブルを更新するには、http://docs.oracle.com/javase/tutorial/uiswing/components/table.html を使用し、レイアウトを適切に構成する方法をfireTableDataChanged();確認してください。

于 2012-12-04T22:42:15.940 に答える