# Jtables und die Tabellenbreite????



## gast (27. Jul 2004)

Moinsens,

ich habe ein kleines Problem. Ich lade mir aus einer db daten in eine Tabelle was auch kein Prob ist ABER die Tabelle zeigt leider alle alle Spalten auto. in gleicher Breite (des Frames) an. Gibst es eine Möglichkeiten um diese in Pixel oder anders schon vorher festzulegen???? Kann nix finden!!!!

mfg David


----------



## Nowotny (27. Jul 2004)

Hallo

Du kannst die Breite jeder Tabellenspalte mit setPreferredWidth() setzen.

Gruß
N.


----------



## Beni (27. Jul 2004)

Also zuersteinmal musst du das automatische Resizen abschalten:
setAutoResizeMode( JTable.AUTO_RESIZE_OFF ).

Und dann kannst du über das TableColumnModel die einzelnen TableColumn's aufrufen, und dort die bevorzugte Grösse einstellen (setPreferredWidth )


----------



## Beni (28. Jul 2004)

Zur Verdeutlichung, wie ich das meinte:


```
public class Main{
   public static void main( String[] args ){
      // Die Daten für das Table
      String[][] data = new String[][]{
            {"a", "b", "c", "d"},
            {"e", "f", "g", "h"},
            {"i", "j", "k", "l"}
      };
      
      // Die Column-Titles
      String[] title = new String[]{
            "A", "B", "C", "D"
      };
      
      // Das JTable initialisieren
      JTable table = new JTable( data, title );
      
      // Das automatische Neusetzen der Grösse würde das Vorhaben, die Grösse selbst
      // zu setzen, stören.
      table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );
      
      // Über das TableColumnModel kommt man an die wichtigen Daten
      TableColumnModel columnModel = table.getColumnModel();
           	
      columnModel.getColumn( 0 ).setPreferredWidth( 20 );
      columnModel.getColumn( 1 ).setPreferredWidth( 50 );
      columnModel.getColumn( 2 ).setPreferredWidth( 80 );
      columnModel.getColumn( 3 ).setPreferredWidth( 110 );
      
      JFrame frame = new JFrame( "Demo" );
      frame.getContentPane().add( new JScrollPane( table ) );
      frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
      frame.pack();
      frame.setVisible( true );
   }
}
```


----------



## thE_29 (28. Jul 2004)

meine Variante 
Die IF Abfrage ist für welche Spalte!

```
private void setColumnWidth()
  {
    for (int i = 0; i < m_tab.getColumnCount(); i++)
    {
      //m_tab = mein JTable
      TableColumn column = m_tab.getColumn(m_tab.getColumnName(i));
      //setzt die Tabellenspalten fix!
      if (i == 0 || i == 1 || i == 2 || i == 4 || i == 5)
      {
        column.setPreferredWidth(78);
        column.setMinWidth(78);
        column.setMaxWidth(83);
      }
      else if (i == 3)
      {
//        column.setPreferredWidth(102);
        column.setMinWidth(105);
      }
      else
      {
        //      column.setPreferredWidth(460);
        column.setMinWidth(460);
      }
    }
  }
```


----------



## AlArenal (28. Jul 2004)

Ich habe eine Tabelle in einer vertikelen SplitPane, d.h. sie hat eine veränderliche Breite. Wie kann ich einzelnen Spalten eine feste Größe geben und gleichzeitig sicherstellen, dass die Tabelle über die komplette Breite geht (weil wenigstens eine andere Spalte variabel ist und sich auto-resized)?


----------



## thE_29 (28. Jul 2004)

lesen ist halt schwer


----------



## AlArenal (28. Jul 2004)

Der Satz hat mir nicht wirklich geholfen.


----------



## thE_29 (28. Jul 2004)

jo nur das da 2 beispiele stehen wie es geht und du trotzdem du fragst 

sollen wir es dir nochmal posten? oder ist für dich lesen wirklich so schwer oder einfach umdenken, weil es nicht genau für dein bsp passt


----------



## AlArenal (28. Jul 2004)

Wenn es so funktionieren würde, hätte ich es so gemacht, logsich oder?

Wenn ich aber 300 Pixel in der Breite habe und von einer Spalte für ein Datum möchte, dass sie immer sagen wir 75 Pixel breit ist und der User zieht die SplitPane auf, die Tabelle hat nun 370 Pixel Platz und ist trotzdem nur 300 breit, bringt mich das nicht wirklich weiter, denn das sieht mal endbescheiden aus.

Und da ich nicht weiß ob und wie man spaltenweise des Autoresizing (de-)aktivieren kann bringen mir auch 67 weitere Beispiele für ein starres Layout nichts. Auch logisch, oder?


----------



## Roar (28. Jul 2004)

:x ein blick in die API hätte da auch geholfen: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/table/TableColumn.html#setMinWidth(int)


----------



## AlArenal (28. Jul 2004)

So schlau war ich gestern auch schon. Aber was soll das bringen? Mich bringt auch keine minimale Größe für ne Spalte weiter. Oder hab ich was überlesen? 

Ich will eine oder mehrere SPalten einer Tabelle festsetzen und eine einzelne soll alles bekommen was sonst noch an Platz für die Table über ist. Schließlich hat die Splitpane in der die Tabelle sitzt auch ne minimale Breite, mit der ich kalkulieren kann, aber wie weit der User das Teil in die Breite zieht, ist allein sein Ding aber die Table muss sich entsprechend anpassen.

Das kann doch keine so ungewöhnliche Problemstellung sein.. ich find nur trotzdem alles andere, aber keinen Lösungsansatz dafür.


----------



## Roar (28. Jul 2004)

setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN) ?


----------



## thE_29 (28. Jul 2004)

AlArenal, wie schon gesagt, DENKEN muss man halt natürlich auch 


wenn du alle Spalten die fest definiert sein sollen so machst

  column.setMaxWidth(83);   - rat mal was setMaxWidth heißen könnte, MH denk denk....

und die andere lässt du einfach

und tadaaa, die andere bläht sich auf den Rest auf weil die anderen nicht größer werden dürfen als setMaxWidth()!!


----------

