Tach
Nachdem ich einen älteren Code von Beni (http://www.java-forum.org/de/viewtopic.php?t=2359&start=15) in mein Programm integriert habe, gibts immer noch ein Problem.
Wenn ich das Programm starte wird das ColumnModel verwendet (zu sehen an den Spaltenbreiten), doch sobald ich das TableModel mittels "setDataVector(...)" erneuere wird das ColumnModel nicht mehr verwendet (Alle Spalten gleich breit)
Was mich auch wundert, ist dass ich bei setDataVector(data, identifier) eben auch die Spaltenüberschriften übergebe. Ich denke dass an dieser stelle irgendwas von dem ColumnModel überschrieben wird.
Bin für jede Hilfe dankbar, da ich schon so einiges durchsucht habe (z.B. den Realy Big Index)
Thx
Nachdem ich einen älteren Code von Beni (http://www.java-forum.org/de/viewtopic.php?t=2359&start=15) in mein Programm integriert habe, gibts immer noch ein Problem.
Wenn ich das Programm starte wird das ColumnModel verwendet (zu sehen an den Spaltenbreiten), doch sobald ich das TableModel mittels "setDataVector(...)" erneuere wird das ColumnModel nicht mehr verwendet (Alle Spalten gleich breit)
Code:
package gui.tables;
import java.awt.Dimension;
import java.util.Date;
import javax.swing.JTable;
import sql.Plannis_DB;
public class TÜV_Table extends JTable
{
private final TÜV_TableModel model = new TÜV_TableModel();
private final TÜV_ColumnModel columnModel = new TÜV_ColumnModel ();
private String fahrgestellnummer;
private Object[] tmp_ref = {"Bla", new Date(12,12,2004), "false", "Bla"}; // TEST: Wird benötig, um eine leere Zeile anzufügen
public TÜV_Table ()
{
// Tabelleneigenschaften
setEnabled(false);
// Das für die Tabelle zuständige TableModel
setModel(model);
setColumnModel(columnModel);
}// end constructor
public void changeTable(String fahrgestellnummer)
{
model.changeTable(fahrgestellnummer);
this.fahrgestellnummer = fahrgestellnummer;
}// endmethod
/**
* fügt der Tabelle (genauer dem TableModel) eine neue (leere) Zeile hinzu.
*/
public void addRow ()
{
model.addRow(tmp_ref);
}// endmethod
/**
* löscht die zur Zeit selektierte Zeile aus dem TableModel
*/
public void deleteSelectedRow()
{
model.removeRow(getSelectedRow());
}// endmethod
/**
* speichert alle Daten der Tabelle in der Datenbank.
*/
public void saveTable ()
{
int x = model.getRowCount();
int i = 0;
// TODO
}// endmethod
}// endclass TÜV_Table
------------------------------------------------------------------------------------------------------------------------------
package gui.tables;
import java.util.Date;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
import sql.Plannis_DB;
public class TÜV_TableModel extends DefaultTableModel
{
private Vector coloumnNames;
private Vector data;
protected TÜV_TableModel ()
{
coloumnNames = new Vector();
coloumnNames.add("Typ");
coloumnNames.add("Datum");
coloumnNames.add("Erledig");
coloumnNames.add("Bemerkung");
// addColumn("Typ");
// addColumn("Datum");
// addColumn("Erledigt");
// addColumn("Bemerkung");
}// end constructor
protected void changeTable (String fahrgestellnummer)
{
data = Plannis_DB.getTÜV(fahrgestellnummer);
setDataVector(data, coloumnNames);
}// endmethod
/**
* sorgt dafür, dass in der Spalte "Erledigt" eine CheckBox angezeigt
* wird (anstelle true/false)
*/
public Class getColumnClass(int c) {
if(c == 1)
//return new Date().getClass(); //kann nicht in Date konvertiert werden, wenn leer
return getValueAt(0, c).getClass();
else if(c == 2)
return new Boolean(false).getClass();
else
return getValueAt(0, c).getClass();
}// endmethod
}// endclass
------------------------------------------------------------------------------------------------------------------------------
package gui.tables;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.TableColumn;
public class TÜV_ColumnModel extends DefaultTableColumnModel
{
protected TableColumn column_1 = new TableColumn(0);
protected TableColumn column_2 = new TableColumn(1);
protected TableColumn column_3 = new TableColumn(2);
protected TableColumn column_4 = new TableColumn(3);
private TÜV_TableCellRenderer renderer = new TÜV_TableCellRenderer();
public TÜV_ColumnModel ()
{
super();
setPropertiesColumn_1();
setPropertiesColumn_2();
setPropertiesColumn_3();
setPropertiesColumn_4();
// WICHTIG; sonst geht nix
addColumn(column_1);
addColumn(column_2);
addColumn(column_3);
addColumn(column_4);
}// end constructor
protected void setPropertiesColumn_1()
{
column_1.setCellRenderer(renderer);
column_1.setHeaderValue("Typ");
column_1.setResizable(false);
column_1.setPreferredWidth(30);
}// endmethod
protected void setPropertiesColumn_2()
{
column_2.setCellRenderer(renderer);
column_2.setHeaderValue("Datum");
column_2.setResizable(false);
column_2.setPreferredWidth(70);
}// endmethod
protected void setPropertiesColumn_3()
{
column_3.setCellRenderer(renderer);
column_3.setHeaderValue("Erledigt");
column_3.setResizable(false);
//column_3.setWidth(30);
column_3.setPreferredWidth(20);
}// endmethod
protected void setPropertiesColumn_4()
{
column_4.setCellRenderer(renderer);
column_4.setHeaderValue("Bemerkung");
column_4.setResizable(false);
column_4.setPreferredWidth(200);
}// endmethod
}// endclass
Was mich auch wundert, ist dass ich bei setDataVector(data, identifier) eben auch die Spaltenüberschriften übergebe. Ich denke dass an dieser stelle irgendwas von dem ColumnModel überschrieben wird.
Bin für jede Hilfe dankbar, da ich schon so einiges durchsucht habe (z.B. den Realy Big Index)
Thx