2013-07-25 13 views
8

Próbuję dopasować szerokość kolumny JTable w zależności od danych w środku. Mój kod:Automatycznie dopasuj kolumnę Jtable do zawartości

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

    } 
} 

Rozmiary są prawidłowe, ale kolumny w tabeli nadal mają tę samą szerokość! Tabela jest osadzone w ScrollPane w GridBagLayout jest problem? Dzięki za wszelkie sugestie.

+2

Spójrz na [link] (http://tips4java.wordpress.com/2008/11/10/table-column-adjuster/) –

+0

Nie działa też. –

Odpowiedz

5
col.setWidth(width); 

Przeczytaj JTable API i kliknij link pod adresem How to Use Tables. W tym samouczku używają one setPreferredWidth(...) do zasugerowania szerokości kolumny.

Możesz także chcieć sprawdzić Table Column Adjuster, który robi to za Ciebie. To rozwiązanie może również uwzględniać szerokość nagłówka kolumny.

+0

Dziękuję. Problem wydaje się być, jeśli nie dodajesz JTable do JScrollPane, wtedy setWidth itp. Nie działa. –

19

To wszystko, czego potrzebujesz:

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

tabela dostosuje każdą szerokość kolumny automatycznie dopasować zawartość. Nie ma potrzeby kontrolowania kiedy wyzwolić zmianę rozmiaru.

+0

To zadziała, ale dostaniesz ostrzeżenie z pytaniem o serialVersionUID, jeśli go nie dodasz. +1. –

+0

Wygląda na to, że po zmianie rozmiaru kolumny tabeli na większą wartość nie zmniejsza ona z powrotem, aby dopasować ją do bieżącego stanu kolumn. – lordoku

Powiązane problemy