Hallöle,
hier mein Problem:
ich hab en Tablemodel und en Columnmodel. Das Tabelmodel funktioniert allein. Mit dem Colummodel (es werden beim drücken von Radiobuttons neue Spalten eingeblendet bzw ausgeblendet) werden alle Werte der ersten Spalte in ALLE Spalten gezeichnet. Ich habe herausgefunden dass im Tablemodel bei public Object getValueAt(int rowIndex, int columnIndex) der columnIndex immer 0 ist. Dabei habe ich einmal 3 und einmal 4 Spalten. Die Spalten füge ich im ColumnModel mit addColumn hinzu bzw sie werden mit removeColumn gelöscht. Die Spaltenüberschriften aus dem Colummodel werden aber richtig angezeigt...nur der Inhalt der Spalten ist falsch...
Ich dachte, wenn ich im ColumnModel Spalten hinzufüge oder lösche dann bekommt doch das Tablemodel davon was mit oder? Muss ich da manuell was zur Kommunikation betragen?
hier mal ein bißchen code
und noch mehr vom TableModel mit Kürzungen...
Danke für Tipps
hier mein Problem:
ich hab en Tablemodel und en Columnmodel. Das Tabelmodel funktioniert allein. Mit dem Colummodel (es werden beim drücken von Radiobuttons neue Spalten eingeblendet bzw ausgeblendet) werden alle Werte der ersten Spalte in ALLE Spalten gezeichnet. Ich habe herausgefunden dass im Tablemodel bei public Object getValueAt(int rowIndex, int columnIndex) der columnIndex immer 0 ist. Dabei habe ich einmal 3 und einmal 4 Spalten. Die Spalten füge ich im ColumnModel mit addColumn hinzu bzw sie werden mit removeColumn gelöscht. Die Spaltenüberschriften aus dem Colummodel werden aber richtig angezeigt...nur der Inhalt der Spalten ist falsch...
Ich dachte, wenn ich im ColumnModel Spalten hinzufüge oder lösche dann bekommt doch das Tablemodel davon was mit oder? Muss ich da manuell was zur Kommunikation betragen?
hier mal ein bißchen code
Code:
public class VerbindungColumnModel extends DefaultTableColumnModel {
/**
*
*/
private VerbindungTableModel verbindungTableModel = null;
private static final long serialVersionUID = 1L;
private final String[] COLNAMES = {"Geräteanschlüsse", "an Raumanschluss", "Gerät / Raum", "Gerät","Anschlüsse", "Raumanschlüsse" };
private TableColumn[] COLUMNS= new TableColumn[6];
public VerbindungColumnModel() {
for (int i = 0; i < COLNAMES.length; ++i) {
COLUMNS[i] = new TableColumn();
COLUMNS[i].setHeaderValue(COLNAMES[i]);
COLUMNS[i].setCellRenderer(new CellRendererVerbindungen());
}
setColumnGeraet();
}
public void setColumnGeraet() {
removeAllColumn();
this.addColumn(COLUMNS[0]);
this.addColumn(COLUMNS[1]);
this.addColumn(COLUMNS[2]);
this.addColumn(COLUMNS[4]);
}
public void setColumnRaum() {
removeAllColumn();
this.addColumn(COLUMNS[5]);
this.addColumn(COLUMNS[3]);
this.addColumn(COLUMNS[4]);
}
private void removeAllColumn() {
int tempCount = this.getColumnCount();
for (int i = 0; i < tempCount; i++) {
this.removeColumn(this.getColumn(0));
}
}
public ObservableVariableListenerImple ObservableVariableListenerImple() {
return (new ObservableVariableListenerImple());
}
public class ObservableVariableListenerImple implements
ObservableVariableListener<Boolean> {
public void variableChange(ObservableVariable<Boolean> observableVariable) {
if (observableVariable.getVariable()) {
setColumnGeraet();
} else {
setColumnRaum();
}
}
}
}
und noch mehr vom TableModel mit Kürzungen...
Code:
public class VerbindungTableModel extends AbstractTableModel {
public int getColumnCount() {
System.out.println("getColumnCount() " );
return isGeraet() ? 4 : 3;
}
public boolean isCellEditable(int rowIndex, int columnIndex){
return true;
}
public int getRowCount() {
if (isGeraet() && appi.getObservableVCurrentGeraetTab3().getVariable() != null){
return appi.getVerwGeraeteAnschluesseTab3().size();
}
else if (!isGeraet() && appi.getObservableVCurrentRaumTab3().getVariable() != null) {
return appi.getVerwRaumAnschluesseTab3().size();
}
else if ((appi.getObservableVCurrentRaumTab3().getVariable() != null) && (appi.getObservableVCurrentGeraetTab3().getVariable() != null)){
return 0;
}
else return 0;
}
public Object getValueAt(int rowIndex, int columnIndex) {
System.out.println("columnIndex " + columnIndex);
// in Auswahl Geraet gewaehlt
if (isGeraet()) {
GeraeteAnschluss geraeteAnschluss = appi.getVerwGeraeteAnschluesseTab3().get(rowIndex);
AnschlussVerbindung anschlussVerbindung = findeAnschlussverbindungVomGeraeteAnschluss(geraeteAnschluss);
switch (columnIndex) {
case 0:
// Geraeteanschluss aus VerwGeraeteAnschluesseTab3
return geraeteAnschluss;
case 1:
// welche Spalten sind in gefundener Anschlussverbindung belegt,
// daraus Verbindung
// zu Raum oder zu Geraet ableiten
if (anschlussVerbindung != null && anschlussVerbindung.getZuRaumanId() != 0) {
return true;
}
return false;
case 2:
// wie case 1 aber mit suche der Raumes bzw des Geraetes aus der
// am Anfang ermittelten anschlussverbindung
if (anschlussVerbindung != null && anschlussVerbindung.getZuRaumanId() != 0) {
return findeRaumZuAnschlussVerb(anschlussVerbindung);
} else if (anschlussVerbindung != null) {
return findeGeraetZuAnschlussVerb(anschlussVerbindung);
}
return null;
case 3:
// wie case 1 aber mit suche der Raumanschlusses bzw des
// Geraeteanschlusses
// aus der am Anfang ermittelten anschlussverbindung
if (anschlussVerbindung != null && anschlussVerbindung.getZuRaumanId() != 0) {
return findeRaumAnschlussZuAnschlussVerb(anschlussVerbindung);
} else if (anschlussVerbindung != null) {
return findeGeraetAnschlussZuAnschlussVerb(anschlussVerbindung);
}
return null;
default:
return null;
}
}
// in Auswahl Raum gewaehlt
else {
int raum1oder2 = 2;
RaumAnschluss raumAnschluss = appi.getVerwRaumAnschluesseTab3().get(rowIndex);
if (raumAnschluss.getRaum1Id() == appi.getCurrentRaumTab3().getId()){
raum1oder2 = 1;
}
AnschlussVerbindung anschlussVerbindung = findeAnschlussverbindungVomRaumAnschluss(raumAnschluss, raum1oder2);
switch (columnIndex) {
case 0:
// Geraeteanschluss aus VerwGeraeteAnschluesseTab3
return raumAnschluss;
case 1:
// Suche des Geraetes aus der am Anfang ermittelten
// anschlussverbindung
return findeGeraetZuGeraeteAnschluss(findeGeraetAnschlussZuAnschlussVerb(anschlussVerbindung));
case 2:
// Suche des Geraeteanschlusses aus der am Anfang ermittelten
// anschlussverbindung
return findeGeraetAnschlussZuAnschlussVerb(anschlussVerbindung);
default:
return null;
}
}
}
@Override
public Class<?> getColumnClass(int col) throws IllegalArgumentException {
if (isGeraet()) {
switch (col) {
case 0:
return String.class;
case 1:
return Boolean.class;
case 2:
return Geraet.class;
case 3:
return GeraeteAnschluss.class;
}
} else {
switch (col) {
case 0:
return String.class;
case 1:
return Raum.class;
case 2:
return RaumAnschluss.class;
}
}
throw new IllegalArgumentException("getColumnClass: ungültige Spaltennummer");
}
public void setVerbindungColumnModel(VerbindungColumnModel verbindungColumnModel) {
this.verbindungColumnModel = verbindungColumnModel;
}
}
Danke für Tipps