2013-07-25 20 views
8

İçerideki verilere bağlı olarak JTable sütun genişliğini eşleştirmeye çalışıyorum. Benim Kodum:İçeriğe sığdırmak için Jtable Sütunu otomatik olarak ayarla

for(int column = 0; column < gui.testsuiteInfoTable.getColumnCount(); column ++){ 
     int width =0; 
    for (int row = 0; row < gui.testsuiteInfoTable.getRowCount(); row++) { 
     TableCellRenderer renderer = gui.testsuiteInfoTable.getCellRenderer(row, column); 
     Component comp = gui.testsuiteInfoTable.prepareRenderer(renderer, row, column); 
     width = Math.max (comp.getPreferredSize().width, width); 
     System.out.println(width); 
    } 
    TableColumn col = new TableColumn(); 
    col = gui.testsuiteInfoTable.getColumnModel().getColumn(column); 
    System.out.println(width); 
    col.setWidth(width); 
    gui.testsuiteInfoTable.revalidate(); 

    } 
} 

Boyutlar doğru sanırım ama yine de sütunların tümü aynı genişliğe sahip! Tablo bir GridBagLayout içinde bir ScrollPane gömülü bu sorun nedir? Önerileriniz için teşekkürler. Eğer fazladan kütüphane kullanabiliyorsa

+2

[Link] 'e bakın (http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/) –

+0

Ayrıca çalışmıyor. –

cevap

5
col.setWidth(width); 

Oku soran tam olarak ne yapar, bir yöntemi "packAll()" ile, bir JXTable sahip bulunmaktadır (https://java.net/projects/swingx) SwingX deneyin JTable API ve How to Use Tables bağlantısını takip edin. Bu öğreticide, bir sütun için genişlik önermek için setPreferredWidth(...) kullanın.

Ayrıca, sizin için bunu yapan Table Column Adjuster da kontrol etmek isteyebilirsiniz. Bu çözüm ayrıca sütun başlığının genişliğini de dikkate alabilir. Hepsi bu

+0

Teşekkürler. JTable'ı bir JScrollPane'e eklemezseniz sorun görünür, daha sonra setWidth vb. Çalışmaz. –

19

İhtiyacınız:

JTable table = new JTable(){ 
    @Override 
     public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
      Component component = super.prepareRenderer(renderer, row, column); 
      int rendererWidth = component.getPreferredSize().width; 
      TableColumn tableColumn = getColumnModel().getColumn(column); 
      tableColumn.setPreferredWidth(Math.max(rendererWidth + getIntercellSpacing().width, tableColumn.getPreferredWidth())); 
      return component; 
     } 
    }; 
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

tablo otomatik olarak her sütun genişliğini ayarlar içeriği sığdırmak için. Yeniden boyutlandırmanın ne zaman tetikleneceğini kontrol etmeye gerek yok.

+0

Bu işe yarar, ancak eklemezseniz serialVersionUID için bir uyarı alırsınız. +1. –

+0

Tablo sütunu daha büyük bir değere yeniden boyutlandırıldığında, geçerli sütun sütunlarına sığacak şekilde küçültülmez. – lordoku