2013-07-13 26 views
18

Sütun genişliklerini içeriğe sığacak şekilde otomatik olarak yeniden boyutlandırmak için JTable'ım gerekir. TableColumnAdjuster sınıfını çok kullanışlı buldum. Ama küçük bir problem var. 5 sütunum var ve onların içeriği çok kısa. Bu durumda, otomatik ayarlayıcıyı kullanırsam, içeriklerine göre ilk dört sütun genişliğini ayarlar ve kalan tüm alanı son sütuna verir. Lütfen örneğe bakınız. İşte son sütunda JTable sütun genişliklerini otomatik olarak yeniden boyutlandırma

enter image description here

, Balance tüm aşırı boşluk verilir. Ama ya bu alanı orta sütunlardan birine vermem gerekirse. Yukarıdaki durumda, o alanı üçüncü sütun olan name'a atamam gerekiyor. TableColumnAdjuster sınıfının adjustColumns() yöntemini değiştirmeyi denedim. Ama çalışamadım.

Sütun boyutlarını değiştirmek için hem column.setPreferredWidth() hem de column.setWidth() numaralı yöntemleri denedim. Ama hiçbir şey değişmiyor gibi görünüyor. JTable'un sütun boyutlarını etkili bir şekilde nasıl değiştirebilirim. Benim ana sorunuma başka bir alternatif veya doğrudan bir cevap varsa, bu daha iyi. Teşekkürler!

cevap

43

sonraki deneyebilirsiniz:

public void resizeColumnWidth(JTable table) { 
    final TableColumnModel columnModel = table.getColumnModel(); 
    for (int column = 0; column < table.getColumnCount(); column++) { 
     int width = 15; // Min width 
     for (int row = 0; row < table.getRowCount(); row++) { 
      TableCellRenderer renderer = table.getCellRenderer(row, column); 
      Component comp = table.prepareRenderer(renderer, row, column); 
      width = Math.max(comp.getPreferredSize().width +1 , width); 
     } 
     if(width > 300) 
      width=300; 
     columnModel.getColumn(column).setPreferredWidth(width); 
    } 
} 

JTable

Bu boyutlandırma yönteminden önce infaz edilmesi gerekmektedir.
Eğer varsa: otomatik biri diğerinden daha sütun daha büyük boyutlandırmak için seçeneği yoktur

table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 

JTable

+0

Bu fantastik, kullanarak sona erdi. SetPreferredColumnModel çağrısından önce "if (width> 300) width = 300" gibi görünen bir kontrol ekledim. Gerçekten uzun veri alanları görüntülediğim bazı durumları giderir. Buna cevabı eklemeyi öneririm - ve ayrıca min/max genişliğini de çıkartabilirsiniz (fantastik opsiyonel parametreler yapardım - aslında bunu codebase'de yapacağım.) (Keşke bilseydim) Böyle bir şeyi başka birinin cevabıyla değiştirmek güzeldi ...CW olmadığı için içeriği izinsiz değiştirmek istemiyorum.) –

+0

Merhaba, @BillK Kodu düzenlemek/eklemekte özgürsünüz ... ve bir ekran görüntüsünüz varsa. ;) –

+0

Ayrıca bir şekilde başlığı da değerlendirebilirim, böylece metni kesilmeyecek? – Xerus

5

. Bu yalnızca tablo görüntülenen ilk defa eklenebilir sen sütuna 1. Bu ekstra alan ekstra alan eklemek için izin verecek

tca = new TableColumnAdjuster(table, 0); 
tca.adjustColumns(); 
TableColumnModel tcm = table.getColumnModel(); 
TableColumn tc = tcm.getColumn(1); 
tc.setWidth(tc.getWidth() + 25); 

:

Belki gibi bir şey çevrilevilebilecekleri.

table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); 

Bu, her sütuna orantılı ekstra alan tahsis olacaktır:

Başka bir seçenek kullanmaktır.

0

Bunu yapabilirsin:

JPanel jp = new JPanel(); 
jp.add(table); 

jp.setLayout(new GridLayout(1,1)); /* little trick ;) and believe me that this step is important to the automatic all columns resize! A import is also needed for using GridLayout*/ 
table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); // this is obvius part 
+0

çalışmıyor ...... – Augusto

1

setAutoResizeMode() nasıl bunu farklılıkları görmek için mevcut olan tüm farklı seçenekler, My durumda ben istedim olacak bir denemelisiniz yeniden boyutlandırmak için tablo söyleyecektir Özellikle iki sütunu yeniden boyutlandırın ve diğer tüm öğelerin nasıl ayarlanacağına karar vermesine izin verin.

jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN); 
TableColumnModel colModel=jTable1.getColumnModel(); 
colModel.getColumn(1).setPreferredWidth(25);  
colModel.getColumn(2).setPreferredWidth(400); 
İlgili konular