Swing Anpassen der Spaltenbreite durch die länge eines Strings

  • Themenstarter Themenstarter aimy
  • Beginndatum Beginndatum
A

aimy

Gast
Hey,

ich wollte mal nachhaken ob es eine möglichkeit gibt die Spaltenbreite durch eine anzahl von Zeichen zu setzen, d.h. Die Spalte 1 soll 10 Zeichen breit sein. Spalte 2 aber nur 5 Zeichen breit, usw.

Bsp.
Code:
      1      |   2   |...
              |       |   
----------|-----|
              |       |

Ich weiß, dass man die Spaltenbreite über die Pixelangaben angeben kann, das sieht bei mir dann ungefähr so aus:

Java:
public void setColumnWidth( JTable in_xTable )
  {
    for( int i = 0; i < m_xListeSpaltenInfo.size(); i++ )
    {
      int iAnzahlZeichen = m_xListeSpaltenInfo.get( i ).getSpaltenZeichenAnzahl();
      TableColumn xTableColumn = in_xTable.getColumnModel().getColumn( i );
      xTableColumn.setPreferredWidth( iAnzahlZeichen );
    }
    
  }

Jetzt die Frage:
muss ich die Zeichenanzahl in Pixel umrechnen ("Hallo"-> zeichenanzahl = 5 -> pixellänge von 5 Zeichen ) , gibt es da eine möglichkeit, oder muss man ganz anders vorgehen?


Danke,

aimy
 
Zuletzt bearbeitet von einem Moderator:
Hi,
also ich arbeite immer mit relativen Werten...zuerst die Breite der Tabelle besorgen ( hier aus einem ScrollPane ) und dann die einzelnen Spalten setzen

Code:
	public void resizeColumns() {
		float[] colSize = { 0.10f, 0.10f, 0.30f, 0.30f, 0.10f, 0.10f };
		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
		int totalColumnWidth = scrollPane.getWidth();
		for (int colIndex = 0; colIndex < table.getColumnCount(); colIndex++) {
			TableColumn col = table.getColumnModel().getColumn(colIndex);
			float width = totalColumnWidth * colSize[colIndex];
			col.setPreferredWidth((int) width);
		}
	}
 
Du kannst dir auch den FontRenderContext des grafischen Elements besorgen und sowas machen:

Java:
FontRenderContext frc = ((Graphics2D)table.getGraphics()).getFontRenderContext();
TextLayout textLayout = new TextLayout(text, font, frc);
Rectangle2D bounds = textLayout.getBounds();
int textLength = (int)Math.round(bounds.getWidth());
 
Java:
FontRenderContext frc = ((Graphics2D)table.getGraphics()).getFontRenderContext();
TextLayout textLayout = new TextLayout(text, font, frc);
Rectangle2D bounds = textLayout.getBounds();
int textLength = (int)Math.round(bounds.getWidth());
[/QUOTE]

Danke, so hats geklappt 🙂
 

Neue Themen


Zurück
Oben