2011-06-24 14 views
5

Aşağıdaki JTable'ım var (Aslında bu, Netbeans'dan bir ETable). O öyle konteyner boyunca uzanır - Ben JTable.AUTO_RESIZE_OFFOtomatik/en uygun JTable sütunları, ancak son sütunu gerdirin

enter image description here

tutmak değil, kullanmak istediğiniz

Ben sadece sığdırmak için her sütunu yeniden boyutlandırma, aşağıda gibi programlama sığdırmak istiyorum Hücre içeriği veya sütun başlığı metni ve en sağdaki sütuna sahip olmak kalan alanı doldurur. Bunu nasıl yapabilirim ?

enter image description here

+0

Bu belgesine bakınız: Tablo kendisi yeniden boyutlandırıldığında sütunları da yeniden boyutlandırılır böylece

İsteğe bağlı olarak masaya bir dinleyici ekleyin/2008/11/10/sofra sütun ayarlayıcı /) –

cevap

0

başlayacak otomatik yeniden boyutlandırma kapatabilirsiniz. Bu durumda sütunlar içeriğe göre otomatik olarak yeniden boyutlandırılacaktır. Ancak bu durumda, toplam sütun genişliği tablonun genişliğinden daha azsa, sağ tarafta boş yer olacaktır. Daha büyükse yatay kaydırma çubuğu görünecektir.

TableColumn.setPreferredWidth'u kullanarak her sütuna tercih edilen genişlik atayabilirsiniz. Swing buna göre fazladan alan dağıtmaya çalışacaktır. Ama bu da garanti edilmez.

0

Otomatik yeniden boyutlandırmayı KAPALI (setAutoResizeMode(JTable.AUTO_RESIZE_OFF);) olarak ayarlamanız gerekir, ancak sütunlarınızı yeniden boyutlandırmak için bir yardımcı yönteme de ihtiyacınız vardır.

Bu JTable uzanan özel bir sınıf içinde olduğunu, ancak aynı kolaylıkla varolan JTable başvurabilirsiniz: Eğer bir satır eklediğinizde

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

Çağrı resizeColumnWidth(). [Tablo sütun Ayar] (http://tips4java.wordpress.com:

public MyCustomJTable() { 
    super(); 
    addHierarchyBoundsListener(new HierarchyBoundsAdapter() { 
     @Override 
     public void ancestorResized(HierarchyEvent e) { 
      super.ancestorResized(e); 
      resizeColumnWidth(); 
     } 
    }); 
    setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
}