2016-06-15 9 views
0

Ich verweise diese Seite. https://tips4java.wordpress.com/2008/11/10/table-column-adjuster/ Größe meiner Spaltenbreite in Jtable und es funktioniert perfekt.Größe der Breite der JTable-Spalten ändern

Aber einige Spalten sind nicht in der bevorzugten Breite und kann jemand Assistent mich finden, wo ist das Problem in meinem Code?

Ich habe das Jtable Bild in meinem Projekt beigefügt.

jtable Bild von Studenten Details:

http://i.stack.imgur.com/owhW6.png

public void resizeColumnWidth() { 
    for (int column = 0; column < student_table.getColumnCount(); column++) 
     { 
     TableColumn tableColumn = student_table.getColumnModel().getColumn(column); 
     int preferredWidth = tableColumn.getMinWidth(); 
     int maxWidth = student_table.getColumnModel().getColumn(column).getMaxWidth(); 

     for (int row = 0; row < student_table.getRowCount(); row++) 
     { 
      TableCellRenderer cellRenderer = student_table.getCellRenderer(row, column); 
      Component c = student_table.prepareRenderer(cellRenderer, row, column); 
      int width = c.getPreferredSize().width + student_table.getIntercellSpacing().width; 
      preferredWidth = Math.max(preferredWidth, width); 

      if (preferredWidth >= maxWidth) 
       { 
       preferredWidth = maxWidth; 
       break; 
       } 
     } 

     tableColumn.setPreferredWidth(preferredWidth); 
     } 
    } 

Antwort

1

Aber einige Spalten sind nicht in bevorzugter Breite

Wenn Sie den Namen in der Kopfzeile bezieht abgeschnitten werden Das Problem ist, dass der Code, den Sie verwenden, nur die Daten berücksichtigt. Wenn Sie möchten, dass die Header-Breite berücksichtigt wird, müssen Sie die tatsächliche TableColumnAdjuster Klasse für die volle Funktionalität verwenden.

Wenn Sie nur Sorgen um die Daten in jeder Zelle, haben Sie noch ein potenzielles Problem:

int maxWidth = student_table.getColumnModel().getColumn(column).getMaxWidth(); 

Haben Sie die maximale Breite jeder Spalte?

Ich glaube, der Standardwert ist 75 Pixel.

Hinweis Wenn Sie die Breite auf Spaltenebene nicht begrenzen möchten, können Sie einfach einen Wert wie: Integer.MAX_VALUE verwenden.

Warum haben Sie auch den Code aus dem Beispielcode im Link geändert? Sie haben bereits einen Verweis auf die TableColumn, also warum erhalten Sie die Referenz erneut. Ändern Sie die Codebeispiele nur, wenn Sie einen bestimmten Grund dafür haben.

+0

Könnten Sie mir bitte sagen, wo ich maxWidth in meinem Code deklarieren sollte? – lakshi