Hallo zusammen, hallo speziell rme (da dies das Folgethema zu dem erledigten "Thread-Thema" ist).
Es geht darum, dass ich während der Ausführung eines Threads 2 Tabellen in zwei verschiedenen Panels laufend aktualisieren lasse. Dabei läuft die eine Aktualisierung super, und die andere eher gar nicht. Da sich das im Programm über etliche Klassen zieht, kann ich leider mit keinem "zusammengefassten" Code dienen. Was ich ja schon festgestellt habe, ist, dass beide Tabellen wie gewünscht aktualisiert werden, wenn ich dem "kränkelnden" TableModel beim Instanziieren eine andere Liste mitgebe.
Um das einigermaßen für die Öffentlichkeit abzubilden, werde ich jetzt 2 runnable jars kreieren, einmal "kaputt aber korrekt" und einmal "funktionierend aber gefaked". Zusätzlich poste ich den Code für die Instantiierung der TableModels und die beiden Listenklassen um die es geht. Falls mehr Information gebraucht wird, bitte einfach sagen. Irgendwie findet sich schon ein einigermaßen brauchbarer Approach an die Sache.... hoffe ich. :toll:
Kurzanleitung, was im Tool zu tun ist:
- "Auswahl generieren" drücken
- Slider auf 100 stellen
- Bei Rückschrittlänge eine 0 eingeben
- "Angleichung durchführen" drücken
- Beobachten und vergleichen.
Konstruktor der Klasse Launcher (welche Main() enthält), die Zuweisung für this.mcModel bezieht sich auf das Modell der Tabelle des mittleren Panels. Im weiteren Verlauf wird der Tabelle natürlich das Modell zugewiesen und dem Panel die Tabelle, ich denke an diesen weiteren Zuweisungen wird nichts streitbares dran sein...
Das eigene Tabellenmodell "CardModel" sieht so aus:
Und hier hätten wir dann noch die beiden Listenklassen, wo meine eigene Vermutung mir sagt dass diese ja zum momentanen Zeitpunkt gar keinen signifikanten Unterschied aufweisen, aber das kann natürlich auch ein Irrtum sein, sonst würde ich die Frage nicht öffentlich stellen:
Bitte nicht vergessen, beim Testen des Programms die csv-Datei im gleichen Verzeichnis zu parken.
Vielen Dank vorab!!!
Es geht darum, dass ich während der Ausführung eines Threads 2 Tabellen in zwei verschiedenen Panels laufend aktualisieren lasse. Dabei läuft die eine Aktualisierung super, und die andere eher gar nicht. Da sich das im Programm über etliche Klassen zieht, kann ich leider mit keinem "zusammengefassten" Code dienen. Was ich ja schon festgestellt habe, ist, dass beide Tabellen wie gewünscht aktualisiert werden, wenn ich dem "kränkelnden" TableModel beim Instanziieren eine andere Liste mitgebe.
Um das einigermaßen für die Öffentlichkeit abzubilden, werde ich jetzt 2 runnable jars kreieren, einmal "kaputt aber korrekt" und einmal "funktionierend aber gefaked". Zusätzlich poste ich den Code für die Instantiierung der TableModels und die beiden Listenklassen um die es geht. Falls mehr Information gebraucht wird, bitte einfach sagen. Irgendwie findet sich schon ein einigermaßen brauchbarer Approach an die Sache.... hoffe ich. :toll:
Kurzanleitung, was im Tool zu tun ist:
- "Auswahl generieren" drücken
- Slider auf 100 stellen
- Bei Rückschrittlänge eine 0 eingeben
- "Angleichung durchführen" drücken
- Beobachten und vergleichen.
Konstruktor der Klasse Launcher (welche Main() enthält), die Zuweisung für this.mcModel bezieht sich auf das Modell der Tabelle des mittleren Panels. Im weiteren Verlauf wird der Tabelle natürlich das Modell zugewiesen und dem Panel die Tabelle, ich denke an diesen weiteren Zuweisungen wird nichts streitbares dran sein...
Java:
public Launcher() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.updater = new UpdaterThread();
this.mixer = new Mixer(this.updater);
this.mixer.setSourceCardList(new SourceCardList());
this.mixer.setMixedCardList(new MixedCardList());
this.mixer.setProposalCardList(new ProposalCardList());
this.csvm = new CSVManagement();
this.csvm.read();
this.csvm.putDataToSourceTable(this.mixer.getSourceCardList());
this.mcModel = new CardModel(this.mixer.getMixedCardList());
//this.mcModel = new CardModel(this.mixer.getProposalCardList());
this.scModel = new CardModel(this.mixer.getSourceCardList());
this.pModel = new ProposalModel(this.mixer.getProposalCardList());
initComponents();
this.mixer.setProgressBar(this.progressBar1);
this.mixer.setSlider(this.slider1);
this.mixer.setpModel(this.pModel);
this.mixer.setTable3(this.table3);
//this.mixer.run();
//this.updater.run();
}
Das eigene Tabellenmodell "CardModel" sieht so aus:
Java:
package middleware;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import data.Card;
/**
*
* @author sash
*/
public class CardModel extends AbstractTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
private static final String[] HEADER = { "Name", "Ausgewählt", }; //$NON-NLS-1$ //$NON-NLS-2$
private List<Card> data;
public CardModel(List<Card> data) {
this.data = data;
}
public boolean isCellEditable(int row, int column) {
return column != 4;
}
public int getRowCount() {
return this.data.size();
}
public int getColumnCount() {
return HEADER.length;
}
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Card card = this.data.get(rowIndex);
switch (columnIndex) {
case 0:
card.setName(aValue.toString());
//$FALL-THROUGH$
case 1:
card.setPicked(Boolean.parseBoolean(aValue.toString()));
//$FALL-THROUGH$
default:
//
}
this.data.set(rowIndex, card);
}
@SuppressWarnings("boxing")
public Object getValueAt(int row, int column) {
Card card = this.data.get(row);
switch (column) {
case 0:
return card.getName();
case 1:
return card.isPicked();
default:
return ""; //$NON-NLS-1$
}
}
@Override
public String getColumnName(int column) {
return HEADER[column];
}
// Hier kann man die Klasse für eine Spalte ändern.
@Override
public Class<?> getColumnClass(int column) {
if (column == 1) {
return Boolean.class;
}
return super.getColumnClass(column);
}
}
Und hier hätten wir dann noch die beiden Listenklassen, wo meine eigene Vermutung mir sagt dass diese ja zum momentanen Zeitpunkt gar keinen signifikanten Unterschied aufweisen, aber das kann natürlich auch ein Irrtum sein, sonst würde ich die Frage nicht öffentlich stellen:
Java:
package data;
import java.util.ArrayList;
public class ProposalCardList extends ArrayList<Card>{
/**
*
*/
private static final long serialVersionUID = 1L;
}
Java:
package data;
import java.util.ArrayList;
public class MixedCardList extends ArrayList<Card>{
/**
*
*/
private static final long serialVersionUID = 1L;
}
Bitte nicht vergessen, beim Testen des Programms die csv-Datei im gleichen Verzeichnis zu parken.
Vielen Dank vorab!!!
Anhänge
Zuletzt bearbeitet: