Jtables und die Tabellenbreite????

  • Themenstarter Themenstarter gast
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

gast

Gast
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
 
Hallo

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

Gruß
N.
 
Zur Verdeutlichung, wie ich das meinte:

Code:
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 );
   }
}
 
meine Variante 😉
Die IF Abfrage ist für welche Spalte!
Code:
  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);
      }
    }
  }
 
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)?
 
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
 
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?
 
: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)
 
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.
 
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()!!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben