2016-04-23 15 views
0

私はJtextfieldsのフィールドをテーブルに追加するはずのjtableを持っていますが、テーブルは必要に応じて(列名が表示され行はありません)それはJTableは動的に行を追加しません

私のテーブル

public void createTable(){ 
    model.setColumnIdentifiers(columns); 
    JTable table = new JTable(model);  
    JScrollPane scrollPane = new JScrollPane(table); 
    table.setPreferredScrollableViewportSize(table.getPreferredSize()); 
    tablepanel.add(scrollPane, BorderLayout.SOUTH); 

} 

そして、私はデータを追加するために使用するボタンを作成する方法空白の列を代わりに追加されます(一度だけ)新しい行を追加します

class AddHandler implements ActionListener { 

     public void actionPerformed(ActionEvent e) { 
      if(e.getSource()==btnUpload) 
      { 

       String nameRow = txtName.getText(); 
       String surnameRow = txtSurname.getText(); 
       String phoneRow = txtPhone.getText(); 
       String addressRow = txtAddress.getText(); 
       String postcodeRow = txtPostcode.getText(); 
       String emailRow = txtEmail.getText(); 
       Object[] row = {nameRow,surnameRow,phoneRow,addressRow,postcodeRow,emailRow}; 
       model.addRow(row); 

      } 

     } 
    } 

私が持っていますデフォルトのモデルは、このようなグローバル変数として設定:任意の提案が高く評価されている

private DefaultTableModel model = new DefaultTableModel(); 

+1

「何か提案があります」 - 問題を示す[SSCCE](http://sscce.org/)を作成します。したがって、JTableと「行の追加」ボタンを含むフレームを作成します。行追加ボタンは、ハードコードされたデータの行をテーブルに追加するだけです。そして、一度それを取得すると、フレームのテキストフィールドからデータを動的に取得します。 SSCCEに問題がある場合は、コンパイルしてテストしていることを確認できるコードがあります。 – camickr

答えて

1

あなたの問題は、あなたがtable.setPreferredScrollableViewportSize(table.getPreferredSize())を削除するかの推奨サイズを設定する必要が0にスクロールペインのサイズを設定するかもしれないあなたテーブルtable.setPreferredSize()table.getPreferredSize()を使用してください。

+0

ありがとう、私の頭の上に行った非常に簡単なソリューション! – breadkun

1

setPreferredScrollableViewportSize()を呼び出す代わりに、getPreferredScrollableViewportSize()のテーブルの実装をオーバーライドし、高さをgetRowHeight()の倍数にすることを検討してください。競合例がhereと表示されます。

JTable table = new JTable(tableModel) { 

    @Override 
    public Dimension getPreferredScrollableViewportSize() { 
     return new Dimension(200, table.getRowHeight() * N); 
    } 
}; 

image

あなたはImplementing a Scrolling-Savvy ClientScrollableインターフェースについての詳細を学ぶことができます。