2011-06-24 11 views
5

Mam następujące JTable (w rzeczywistości jest to ETable z Netbeans). Rozciąga się ona w poprzek pojemnika w - Chciałbym, aby utrzymać to, a nie używać JTable.AUTO_RESIZE_OFFAuto/best fit kolumny JTable, ale rozciągnij ostatnią kolumnę

enter image description here

chciałbym aby dopasować go programowo jak poniżej, zmiana rozmiaru każdej kolumny, aby dopasować tylko zawartość komórki lub tekst nagłówka kolumny, a kolumna po prawej stronie wypełnia pozostałe miejsce. Jak mogę to zrobić ?

enter image description here

+0

patrz tym artykule: [Tabela Kolumna Adjuster] (http://tips4java.wordpress.com/2008/11/10/table-column-adjuster /) –

Odpowiedz

0

Można wyłączyć Automatyczne ustawienie rozmiaru. W takim przypadku kolumny będą automatycznie zmieniać rozmiar według zawartości. Ale w tym przypadku, jeśli całkowita szerokość kolumny jest mniejsza niż szerokość tabeli, puste miejsce będzie tam po prawej stronie. Jeśli jest większy, pojawi się poziomy pasek przewijania.

Możesz przypisać preferowaną szerokość do każdej kolumny, używając TableColumn.setPreferredWidth. Swing będzie starał się rozpowszechniać dodatkową przestrzeń zgodnie z tym. Ale to też nie jest gwarantowane.

0

Musisz ustawić autoResize na WYŁ. (setAutoResizeMode(JTable.AUTO_RESIZE_OFF);), ale aby zmienić rozmiar kolumn, potrzebujesz również metody pomocnika.

To jest wewnątrz klasy niestandardowej, która rozciąga JTable, ale można równie dobrze odnosi się do istniejącego 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); 
     } 
    } 
} 

połączeń resizeColumnWidth() po dodaniu wiersza.

ewentualnie dodać detektor do stołu, tak, że kolumny są zmniejszane, gdy sama tabela zmieniany:

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