JTabel Überschriftenzeile größe anpassen

Serethos

Erfahrenes Mitglied
Servus

habt ihr ne idea wie ich bei einen JTable die autosize für die Überschriftenzeile ausschalte.

denn wenn ich mit

jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

arbeite schiebt er die Felder nicht mehr zusammen aber bei zu großen namem kommt nur noch sowas wie Anschrift des.... und das muss man doch ganz ausschalten können?
 
Moin,
such mal hier im Forum nach "Optimale Spaltenbreite", "Spaltenbreite anpassen" o.ä. IIRC hatten wir das Thema schon mal.
 
Servus

hab dein tip ausprobiert und das forum durchsucht aber nix gefunden hab dann sogar nach JTable gesucht um was zu finden.
Hab mir die api auch nochmal durchgelesen aber find da auch nix oder bin zu blind :-(

kannst mir nochmal helfen
 
Hm, ich dachte ich hätte das schon mal geschrieben.
Also gut, dann jetzt aber:

Code:
  /**
   * Setzt für alle Spalten die optimale Spaltenbreite.
   * 
   */
  private void sizeColumnsToFit() {
    Rectangle viewRect = yourScrollPane.getViewport().getViewRect();
    Point upperRow = new Point(viewRect.x, viewRect.y);
    Point lowerRow = new Point(viewRect.x, viewRect.y + viewRect.height - 1);

    for (int index = 0; index < yourTable.getColumnCount(); index++) {
  	TableColumn col = yourTable.getColumnModel().getColumn(index);
  	int prefSize = 0;

  	if (col.getHeaderRenderer() != null)
  	  prefSize =
  		col
  		  .getHeaderRenderer()
  		  .getTableCellRendererComponent(null, col.getHeaderValue(), false, false, 0, 0)
  		  .getPreferredSize()
  		  .width;
  	else
  	  prefSize =
  		yourTable
  		  .getDefaultRenderer(String.class) // je nachdem
  		  .getTableCellRendererComponent(
  			yourTable,
  			col.getHeaderValue(),
  			false,
  			false,
  			0,
  			0)
  		  .getPreferredSize()
  		  .width;

  	int fromRow =
  	  yourTable.rowAtPoint(upperRow) != -1 ? yourTable.rowAtPoint(upperRow) : 0;
  	int toRow =
  	  yourTable.rowAtPoint(lowerRow) != -1
  		? yourTable.rowAtPoint(lowerRow)
  		: yourTable.getRowCount();

  	for (int rowIndex = fromRow; rowIndex < toRow; rowIndex++)
  	  prefSize =
  		Math.max(
  		  prefSize,
  		  yourTable
  			.getCellRenderer(rowIndex, index)
  			.getTableCellRendererComponent(
  			  yourTable,
  			  yourTable.getModel().getValueAt(rowIndex, index),
  			  false,
  			  false,
  			  rowIndex,
  			  index)
  			.getPreferredSize()
  			.width);

  	col.setPreferredWidth(prefSize);
  	col.setWidth(prefSize);
    } // for 0..columnCount
  }

Musst natürlich yourTable mit Deiner Variablen ersetzen, ebenso yourScrollPane. Dann sollte das funktionieren. Zumindest hatten wir das so im Einsatz...
 
Servus

danke für das progi also es sieht jetzt besser aus wie vorher.

aber irgendwie seh ich dorch dein quellcode absolute ned durch.

und mir ist eingefahlen es währe doch sinvoll die Table so formatieren das die Überschriftenzeile sich nach dem text der in die zeilen rein kommt angepasst werden kann so wie was du schon mal geposted hast

http://www.tutorials.de/tutorials157893.html
 
Zuletzt bearbeitet:
kannst mir vieleicht nochmal weiter helfen versuch gerade dein quellcode zuverstehen hab da ein problem bei
Code:
 prefSize =
 				Math.max(
 					prefSize,
 				    getCellRenderer(rowIndex, index)
 					    .getTableCellRendererComponent(
 						    this,
 						    getValueAt(rowIndex, index),
 						    false,
 						    false,
 						    rowIndex,
 						    index)
 					    .getPreferredSize()
 					    .width);
hab rausgefunden das die math.max den größeren wert zurückgibt aber da bekomm ich auch immer ne null pointer exception vieleicht kannst ja was damit anfangen

java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableColumnModel.getColumn(Unknown Source)
at javax.swing.JTable.getCellRenderer(Unknown Source)
at gui.Record.Result.sizeColumnOptimal(Result.java:230)
at gui.Record.Result.sizeColumnsOptimal(Result.java:161)
at gui.Query$40.actionPerformed(Query.java:1922)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
.
.
.
.
.
 
Scheinen Probleme mit dem CellRenderer zu sein. Bau Dir ein paar Debugausgaben ein und sieh selbst nach.
 
Zurück