Hallo Leute,
habe mal eine Frage vielleicht wisst Ihr ja einen Rat?
Habe mir eine sortierbares Tablemodel implementiert funktioniert auch alles wunderbar Code anbei:
Wie mann sieht benutze ich zwei Vektoren einen Für die Daten und einen für den Status der Objekte.
Die Einzelnen Spalten lassen sich auch wunderbar sortieren jedoch wenn ich die Spalte mit dem Status sortieren lasse stimmt die Zeilenzuordnung nicht mehr, da ja Daten und Status in verschiedenen Vektoren sind. Giebt es irgend eine Möglichkeit die beiden Vekoren zu synchronisieren also wenn ich den data Vektor sortiere das die Reihenfolge der Elemente im status Vektor angepasst werden und anders herum?
habe mal eine Frage vielleicht wisst Ihr ja einen Rat?
Habe mir eine sortierbares Tablemodel implementiert funktioniert auch alles wunderbar Code anbei:
Code:
public class DistrictTableModel extends AbstractTableModel implements
SortableTableModelInterface
{
private Vector data;
private Object[] headerData;
private Comparator comperator;
private ColorChooser chooser;
private Vector stats;
public DistrictTableModel(Object[] colHeads, Vector data,
Comparator comperator, ColorChooser chooser)
{
super();
this.comperator = comperator;
this.data = data;
this.headerData = colHeads;
this.chooser = chooser;
this.stats = new Vector(this.data.size());
for (int i = 0; i < data.size(); i++) {
if (data.get(i) instanceof District) {
District dis = (District) data.get(i);
chooser.getColorChoice(dis.getColor()).setEnable(false);
Iterator iter = dis.getLocations().values().iterator();
double hundProz = dis.getLocations().size();
double ok = 0;
double psoOk = 0;
while (iter.hasNext()) {
Location loc = (Location) iter.next();
Color col = loc.getColor();
if (col.equals(Color.green)) {
ok = ok + 1;
}
else {
if (col.equals(Color.orange)) {
psoOk = psoOk + 0.5;
}
else
if (col.equals(Color.blue)) {
hundProz = hundProz - 1;
}
}
}
if (hundProz == 0) {
this.stats.add(i, new Integer(100));
}
else {
Integer erg = new Integer( (int) ( ( (ok + psoOk) / hundProz) * 100));
this.stats.add(i, erg);
}
}
}
}
/**
* Returns the number of columns in the model.
*
* @return the number of columns in the model
* @todo Diese javax.swing.table.TableModel-Methode implementieren
*/
public int getColumnCount()
{
return this.headerData.length;
}
/**
* Returns the number of rows in the model.
*
* @return the number of rows in the model
* @todo Diese javax.swing.table.TableModel-Methode implementieren
*/
public int getRowCount()
{
return this.data.size();
}
/**
* Returns the value for the cell at <code>columnIndex</code> and
* <code>rowIndex</code>.
*
* @param rowIndex the row whose value is to be queried
* @param columnIndex the column whose value is to be queried
* @return the value Object at the specified cell
* @todo Diese javax.swing.table.TableModel-Methode implementieren
*/
public Object getValueAt(int rowIndex, int columnIndex)
{
switch (columnIndex) {
case 0:
return ( (District)this.data.get(rowIndex)).getName();
case 1:
return new Integer( ( (District)this.data.get(rowIndex)).
getAcousticsLogger().size());
case 2:
return ( (Integer)this.stats.get(rowIndex)).toString() + " %";
case 3:
if ( ( (District)this.data.get(rowIndex)).getPosition() == null) {
return "N";
}
else {
return "Y";
}
default:
return "";
}
}
public Object getObjectAt(int rowIndex)
{
return this.data.get(rowIndex);
}
public Object removeObjectAt(int rowIndex)
{
Object obj = this.data.remove(rowIndex);
if (obj instanceof District) {
District dis = (District) obj;
chooser.getColorChoice(dis.getColor()).setEnable(true);
return dis;
}
else {
return null;
}
}
public boolean removeObject(Object obj)
{
if (obj instanceof District) {
District dis = (District) obj;
if (this.data.remove(obj)) {
chooser.getColorChoice(dis.getColor()).setEnable(true);
return true;
}
else {
return false;
}
}
else {
return false;
}
}
public void addObject(Object obj)
{
if (obj instanceof District) {
District dis = (District) obj;
chooser.getColorChoice(dis.getColor()).setEnable(false);
this.data.add(dis);
}
}
public void sort(int Column)
{
if (this.comperator != null) {
if (this.comperator instanceof DistrictTableComperator) {
( (DistrictTableComperator)this.comperator).setColumn(Column);
Collections.sort(this.data, this.comperator);
}
}
}
/**
* Returns the name of the column at <code>columnIndex</code>.
*
* @param columnIndex the index of the column
* @return the name of the column
* @todo Diese javax.swing.table.TableModel-Methode implementieren
*/
public String getColumnName(int columnIndex)
{
if (columnIndex < this.headerData.length) {
return this.headerData[columnIndex].toString();
}
else {
return super.getColumnName(columnIndex);
}
}
/**
* Returns true if the cell at <code>rowIndex</code> and
* <code>columnIndex</code> is editable.
*
* @param rowIndex the row whose value to be queried
* @param columnIndex the column whose value to be queried
* @return true if the cell is editable
* @todo Diese javax.swing.table.TableModel-Methode implementieren
*/
public boolean isCellEditable(int rowIndex, int columnIndex)
{
return false;
}
/**
* Sets the value in the cell at <code>columnIndex</code> and
* <code>rowIndex</code> to <code>aValue</code>.
*
* @param aValue the new value
* @param rowIndex the row whose value is to be changed
* @param columnIndex the column whose value is to be changed
* @todo Diese javax.swing.table.TableModel-Methode implementieren
*/
public void setValueAt(Object aValue, int rowIndex, int columnIndex)
{
}
}
Die Einzelnen Spalten lassen sich auch wunderbar sortieren jedoch wenn ich die Spalte mit dem Status sortieren lasse stimmt die Zeilenzuordnung nicht mehr, da ja Daten und Status in verschiedenen Vektoren sind. Giebt es irgend eine Möglichkeit die beiden Vekoren zu synchronisieren also wenn ich den data Vektor sortiere das die Reihenfolge der Elemente im status Vektor angepasst werden und anders herum?