Probleme mit JTable: Spaltenbreite ändert sich einfach wieder!

Lautsprecher

Erfahrenes Mitglied
Hallo,
im initialize meiner Anwendung baue ich ein JTable mit JScrollPane auf. Hierbei lese ich gleich zum ersten Mal Daten in die Tabelle:

Code:
defaultTableModel = new DefaultTableModel(1,7);
defaultTableModel.setColumnIdentifiers(Spaltenbezeichnung);
JTable table = new JTable(defaultTableModel);
initDatabaseStuff();
Vector results = datenbankauslesen();
defaultTableModel.setDataVector(results,Spaltenbezeichnung);
defaultTableModel.fireTableDataChanged();
table.setEnabled(false);
DefaultTableCellRenderer ren = new DefaultTableCellRenderer();
ren.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
renderer.setHorizontalAlignment(DefaultTableCellRenderer.LEFT);
table.setShowGrid(true);
table.setColumnSelectionAllowed(true);
table.setFocusable(false);
table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
table.sizeColumnsToFit(true);
table.setBounds(new java.awt.Rectangle(0, 0, 0, 0));
table.getColumnModel().getColumn(0).setPreferredWidth(150); 
table.getColumnModel().getColumn(1).setPreferredWidth(370); 
table.getColumnModel().getColumn(2).setPreferredWidth(120); 
table.getColumnModel().getColumn(3).setPreferredWidth(120); 
table.getColumnModel().getColumn(4).setPreferredWidth(120); 
table.getColumnModel().getColumn(5).setPreferredWidth(120); 
table.getColumnModel().getColumn(6).setPreferredWidth(30); 
table.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
/*table.getColumnModel().getColumn(0).setHeaderRenderer(renderer);
table.getColumnModel().getColumn(1).setHeaderRenderer(renderer);*/
table.getColumnModel().getColumn(2).setCellRenderer(ren);
table.getColumnModel().getColumn(3).setCellRenderer(ren);
table.getColumnModel().getColumn(4).setCellRenderer(ren);
table.getColumnModel().getColumn(5).setCellRenderer(ren);
table.getColumnModel().getColumn(6).setCellRenderer(ren);
jScrollPane = new JScrollPane(table);
jScrollPane.setBounds(new java.awt.Rectangle(29, 168, 618, 481));
jScrollPane.setViewportView(table);
}
return jScrollPane;

Soweit klappt hier alles noch ganz gut. Der Benutzer kann von selbst nicht die Spaltenbreite änderen. Und die Spalten werden auch in der gewünschten Größe angezeigt.

In meiner Anwendung wird per Button-Druck ein neuer Datensatz in die Datenbank geschrieben und gleichzeitig wird dieser dann in der JTable ausgegeben und da krachts.
Die Daten werden zwar angezeigt, jedoch werden die Spaltenbreiten nicht übernommen! Alle Spalten sind wieder gleich groß!

Code:
initDatabaseStuff();  //Datenbank verbinden
datenbankUpdate(); //Datensatz update und schließen

initDatabaseStuff(); //Datenbank wieder öffnen
Vector results = datenbankauslesen(); //Datensätze auslesen und schließen
defaultTableModel.setDataVector(results,Spaltenbezeichnung);  
defaultTableModel.fireTableDataChanged();

Hat vielleicht jemand eine Idee an was das liegen kann, bzw. was ich evtl. in der Buttonmethode nicht berücksichtigt habe?

Grüße
 
Hi Erdal,
ich wollte deine Syntax gerade einbauen aber ich kann AUTO_RESIZE_OFF nicht in Klammer setzen. Der Compiler bringt die Meldung, dass AUTO_RESIZE_OFF nicht "resolved" werden kann.
 
JTable mytable = new JTable();
mytable.setAutoResizeMode(mytable.AUTO_RESIZE_OFF);

sollte gehen, anonsten JTable.AUTO_RESIZE_OFF
 
Griaß Di,
das mit AUTO_RESIZE_OFF hat jetzt geklappt. Er macht mir aber wieder alle Spalten gleich groß nach dem ich den INSERT in die Datenbank geschrieben habe?
Ich versteh das nicht?!!
 
Eine letzte Idee hätte ich noch.

Du hast wie ich jetzt bemerkt habe nur setpreferredsize gesetzt. Weise mit setminimumsize und setmaximumsize für jede spalte den gleichen wert zu wie bei preferredsize.
Das mit Autoresizeoff würde ich auch noch beibehalten.

VG Erdal
 
Code:
table.getColumnModel().getColumn(0).setMaxWidth(150); 
table.getColumnModel().getColumn(1).setMaxWidth(370); 
table.getColumnModel().getColumn(2).setMaxWidth(120); 
table.getColumnModel().getColumn(3).setMaxWidth(120); 
table.getColumnModel().getColumn(4).setMaxWidth(120); 
table.getColumnModel().getColumn(5).setMaxWidth(120); 
table.getColumnModel().getColumn(6).setMaxWidth(30); 
table.getColumnModel().getColumn(0).setMinWidth(150); 
table.getColumnModel().getColumn(1).setMinWidth(370); 
table.getColumnModel().getColumn(2).setMinWidth(120); 
table.getColumnModel().getColumn(3).setMinWidth(120); 
table.getColumnModel().getColumn(4).setMinWidth(120); 
table.getColumnModel().getColumn(5).setMinWidth(120); 
table.getColumnModel().getColumn(6).setMinWidth(30); 
table.setAutoResizeMode(table.AUTO_RESIZE_OFF);

Hi danke Dir nochmal,
aber wenn ich max und min setze, zieht nur der Min-Befehl und ich bekomme eine horizontalen Rollbalken, da die Spalten dann nicht mehr in das Pane passen.
Wenn ich nur MAX mache ist das Pane größer, die Spalten sind alle eng bei einander
 
Moin,
Du musst die Spaltenbreiten schon selbst berechnen und ggf. minimum/maximum/preferredSize setzen. Damit bist Du auf Nummer sicher unterwegs.
 

Neue Beiträge

Zurück