2011-06-24 5 views
5

次のJTableを持っています(実際にはNetbeansのETableです)。私はそれを維持したい、とJTable.AUTO_RESIZE_OFF自動/最適フィットJTableの列ですが、最後の列を伸ばします

enter image description here

を使用していないと思います私は合うように各列のサイズを変更する、以下のようにプログラム的にそれに合わせたいのですが - でのコンテナにまたがりますセルの内容、または列のヘッダーのテキストが含まれ、最も右の列に残りのスペースが入ります。どうやってやるの ?

+0

このチュートリアルを参照:[表の列アジャスター(http://tips4java.wordpress.comを/ 2008/11/10/table-column-adjuster /) –

答えて

0

自動サイズ変更をオフにすることができます。この場合、コンテンツに応じて列のサイズが自動的に変更されます。しかし、この場合、列の幅の合計が表の幅よりも小さい場合は、右側に空白があります。大きい場合は、水平スクロールバーが表示されます。

TableColumn.setPreferredWidthを使用して、各列に適切な幅を割り当てることができます。スイングはそれに応じて余分なスペースを分配しようとします。しかし、これも保証されていません。

0

autoResizeをOFF(setAutoResizeMode(JTable.AUTO_RESIZE_OFF);)に設定する必要がありますが、列のサイズを変更するヘルパーメソッドも必要です。

これは、JTableのを拡張するカスタムクラス内ですが、同じように簡単に既存のJTableを参照することができます。

public void resizeColumnWidth() { 
    int cumulativeActual = 0; 
    int padding = 15; 
    for (int columnIndex = 0; columnIndex < getColumnCount(); columnIndex++) { 
     int width = 50; // Min width 
     TableColumn column = columnModel.getColumn(columnIndex); 
     for (int row = 0; row < getRowCount(); row++) { 
      TableCellRenderer renderer = getCellRenderer(row, columnIndex); 
      Component comp = prepareRenderer(renderer, row, columnIndex); 
      width = Math.max(comp.getPreferredSize().width + padding, width); 
     } 
     if (columnIndex < getColumnCount() - 1) { 
      column.setPreferredWidth(width); 
      cumulativeActual += column.getWidth(); 
     } else { //LAST COLUMN 
      //Use the parent's (viewPort) width and subtract the previous columbs actual widths. 
      column.setPreferredWidth((int) getParent().getSize().getWidth() - cumulativeActual); 
     } 
    } 
} 

コールresizeColumnWidth()を使用すると、行を追加するたびに。随意

列もサイズが変更されるように、テーブル自体のサイズが変更されたときにテーブルにリスナーを追加します。

public MyCustomJTable() { 
    super(); 
    addHierarchyBoundsListener(new HierarchyBoundsAdapter() { 
     @Override 
     public void ancestorResized(HierarchyEvent e) { 
      super.ancestorResized(e); 
      resizeColumnWidth(); 
     } 
    }); 
    setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
} 
関連する問題