Hallo Leude,
folgendes Programm tut nicht, was es soll:
ein Algorithmus (z. B. BubbleSort) soll grafisch mittels Canvas/Paint() dargestellt werden. Man hat ein dynamisch erzeugbares int[] beliebiger Länge, welches zuerst im Ausgangszustand durch unterschiedlich hohe (Höhe in Relation zur Größe des int-Werts) Balken dargestellt wird. Danach wird die sortBubble() Methode ausgeführt, welche mit einem gewissen Delay mittels Thread/sleep etwas ausgebremst wird. Hierbei soll aber nicht nur das Array im Sinne des Algorithmus umgeformt werden, sondern auch ein repaint() ausgeführt werden, um den (nach jedem Durchlauf des gesamten Arrays) aktuellen Stand des Arrays wiederum als Balkengrafik wie oben beschrieben darzustellen. Und genau das geht nicht. Zwar bekomme ich ein SystemOut nach der Sleep-Anweisung, jedoch wird kein repaint() darin ausgeführt. Die Veränderungen am Array werden über die printArray-Methode kontrolliert und funktionieren auch.
Nachfolgend der Code aus der SortBubble-Klasse (extends Sort -> Sort ist ein Canvas, welches einige getXY-Methoden mitbringt):
folgendes Programm tut nicht, was es soll:
ein Algorithmus (z. B. BubbleSort) soll grafisch mittels Canvas/Paint() dargestellt werden. Man hat ein dynamisch erzeugbares int[] beliebiger Länge, welches zuerst im Ausgangszustand durch unterschiedlich hohe (Höhe in Relation zur Größe des int-Werts) Balken dargestellt wird. Danach wird die sortBubble() Methode ausgeführt, welche mit einem gewissen Delay mittels Thread/sleep etwas ausgebremst wird. Hierbei soll aber nicht nur das Array im Sinne des Algorithmus umgeformt werden, sondern auch ein repaint() ausgeführt werden, um den (nach jedem Durchlauf des gesamten Arrays) aktuellen Stand des Arrays wiederum als Balkengrafik wie oben beschrieben darzustellen. Und genau das geht nicht. Zwar bekomme ich ein SystemOut nach der Sleep-Anweisung, jedoch wird kein repaint() darin ausgeführt. Die Veränderungen am Array werden über die printArray-Methode kontrolliert und funktionieren auch.
Nachfolgend der Code aus der SortBubble-Klasse (extends Sort -> Sort ist ein Canvas, welches einige getXY-Methoden mitbringt):
Code:
package gui;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import java.util.TimerTask;
import gui.AlgorithmenFenster;
public class SortBubble extends Sort {
/**
*
*/
private static final long serialVersionUID = 1L;
private AlgorithmenFenster aF;
private int[] array;
private int yAxis;
private int staticXAxis = this.getWidth();
private int xAxis;
private int staticYAxis = this.getHeight();
private int height;
private int width = 5;
public SortBubble(int[] array){
this.array = array.clone();
}
public void paint(Graphics g) {
System.out.println("paint");
g.clearRect(0, 0, getWidth(), getHeight());
String infoLabel = "Ticks: - Vergleiche: " + getVergleiche() + " Vertauschungen: " + getVertauschungen();
g.setColor(Color.black);
g.drawString(infoLabel, staticXAxis, staticYAxis + getHighestValue() + 69);
g.setColor(Color.black);
g.drawLine(1, getHighestValue() + 70, array.length * 7, getHighestValue() + 70);
g.setColor(Color.blue);
for (int i = 0; i < array.length; i++) {
xAxis = i*7;
yAxis = this.getHeight() - 1 - array[i];
height = array[i];
g.draw3DRect(xAxis, yAxis - 15, width, height, true);
}
}
private int getHighestValue() {
int highest = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] > highest) {
highest = array[i];
}
}
return highest;
}
//--------------------------------ALGORITHMUS----------------------------
public void sortArray(){
sort(array);
repaint();
}
private void sort(int[] a) {
array = a;
for (int i = 0; i < array.length - 1; i++) {
printArray();
for (int j = array.length - 1; j > i; j--) {
vergleiche++;
try {
Thread.sleep(10);
repaint();
} catch (InterruptedException e) {
e.printStackTrace();
}
if (array[j - 1] > array[j]) {
vertauschungen++;
int temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
}
}
}
}
public void printArray(){
for(int k = 0 ; k < array.length ; k++){
System.out.print(array[k]);
}
System.out.println();
}
public int[] getArray(){
return array;
}
}