Moin allerseits,
ich schreibe gerade an einer Visualisierung für Sortieralgorithmen.
Damit nicht das ganze Programm hängt während sortiert wird hab ich das starten der sortierung in nen eigenen thread gepackt.
Mit dem Observable pattern wird der view geupdated, der canvas extended.
Soweit so gut, beim adden des Canvas kann ich auch darauf zeichnen, nur wenn ich ihn updaten will returned
immer null.
Ich versteh das nicht ganz, weil das Canvas ja eigentlich die ganze Zeit sichtbar ist.
Ich hoffe einer von euch kann mir helfen!
Vielen Dank schonmal, gruß minimammut
PS: Liste kommt aus sonner komischen Bibliothek die wir benutzen müssen - ich glaub aber nicht dass das mit dem Problem zusammenhängt.
Die Klasse mit dem Problem (SortierBeob.java)
hier wird die Sortierung losgetreten: (Sort.java)
falls ihr noch irgendwas braucht oder fragen habt sagt bescheid!
ich schreibe gerade an einer Visualisierung für Sortieralgorithmen.
Damit nicht das ganze Programm hängt während sortiert wird hab ich das starten der sortierung in nen eigenen thread gepackt.
Mit dem Observable pattern wird der view geupdated, der canvas extended.
Soweit so gut, beim adden des Canvas kann ich auch darauf zeichnen, nur wenn ich ihn updaten will returned
Java:
this.getGraphics()
Ich versteh das nicht ganz, weil das Canvas ja eigentlich die ganze Zeit sichtbar ist.
Ich hoffe einer von euch kann mir helfen!
Vielen Dank schonmal, gruß minimammut
PS: Liste kommt aus sonner komischen Bibliothek die wir benutzen müssen - ich glaub aber nicht dass das mit dem Problem zusammenhängt.
Die Klasse mit dem Problem (SortierBeob.java)
Java:
package sortierdarstellung;
import java.awt.Canvas;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import sum.strukturen.Liste;
public class SortierBeob extends Canvas implements Observer{
private Sortierer so;
private ArrayList<Integer> a;
private Graphics graphic;
public SortierBeob(Sortierer s) {
this.so = s;
}
public void update(Observable arg0, Object arg1) {
Liste al = so.getListe();
a = ausListe(al);
updateDS();
so.pause(Sort.VERZ);
}
private ArrayList<Integer> ausListe(Liste l) {
ArrayList<Integer> ar = new ArrayList<Integer>();
int i =1;
do {
l.geheZuPosition(i);
ar.add((Integer)(l.aktuellesElement()));
i++;
}
while(i<l.laenge());
return ar;
}
public void updateDS() {
int i = 0;
if (this.getGraphics() != null) {
this.getGraphics().clearRect(0, 0, this.getWidth(), this.getHeight());
a.remove(0);
for (int j : a) {
this.getGraphics().drawOval(i, j, Sort.BREITE, Sort.BREITE);
i += Sort.BREITE;
}
}
}
@Override
public void paint(Graphics g) {
this.graphic=g;
System.out.println(g.getClass().toString());
update(so,new Object());
}
}
hier wird die Sortierung losgetreten: (Sort.java)
Java:
package sortierdarstellung;
import java.util.ArrayList;
import java.util.Collections;
import sum.strukturen.Liste;
class Sort {
private Sortierer sorter=new FelixOliver();
private Thread t = new Thread(sorter);
private SortierBeob sb = new SortierBeob(sorter);
public static final int BREITE=3;
public static final int ANZAHL = 200;
public static final int VERZ = 100;
private ArrayList<Integer> a;
public Sort() {
fillList();
sorter.setListe(zurListe(a));
sorter.addObserver(sb);
}
public void sortiere(){
t.start();
}
private void fillList(){
a = new ArrayList<Integer>();
for(int i=0;i<ANZAHL;i++) {
a.add(i);
}
Collections.shuffle(a);
}
private Liste zurListe(ArrayList<Integer> a) {
Liste list = new Liste();
for(int i:a){
list.haengeAn(i);
}
return list;
}
public Sortierer getSortierer() {
return sorter;
}
}