lundi 1 juin 2015

Graphik nach 100 ms neu laden

Hallo Liebe Forum-Mitglieder,

ich habe meine eigene Klasse BalkenDiagramm welche eine eigene Klasse IntArray besitzt, IntArray wurde von mir selber programmiert und ähnelt der Klasse ArrayList (Aufgabe noch aus dem Unterricht). Jedoch wollte ich jetzt was eigenes damit programmieren und es funktioniert nicht.

Die Klasse BalkenDiagramm besitzt Methoden wie:
Java Code:

  1.  
  2. public void paintComponent(Graphics g) {
  3. super.paintComponent(g);
  4. System.out.println("Graphik neu zeichnen.....");
  5. if (drawable && intArray != null) {
  6.  
  7.  
  8. try {
  9. g2d.setColor(drawColor);
  10. } catch (Exception e) {
  11.  
  12. }
  13.  
  14. if (intArray.getLength() > 0 && this.getHeight() > 0) {
  15. int maxValue = intArray.getValue(getIndexOfMaximum(0, intArray.getLength() -1));
  16. int minValue = intArray.getValue(getIndexOfMinimum(0, intArray.getLength() -1));
  17. int zahlenBereich = maxValue - minValue;
  18. int faktor = 1;
  19.  
  20. int middle = (int) (this.getHeight() - this.getHeight() * makeValuePositivDouble((double) minValue / (double) zahlenBereich));
  21.  
  22. if (maxValue >= 0 && minValue >= 0) {
  23. middle = getHeight();
  24. zahlenBereich = maxValue;
  25. }
  26. if (maxValue < 0 && minValue < 0) {
  27. middle = 0;
  28. zahlenBereich = minValue;
  29. }
  30.  
  31. if (zahlenBereich != 0)
  32. faktor = this.getHeight() / zahlenBereich;
  33.  
  34.  
  35. System.out.println("maxValue: " + maxValue);
  36. System.out.println("minValue: " + minValue);
  37. System.out.println("zahlenBereich: " + zahlenBereich);
  38. System.out.println("faktor: " + faktor);
  39. System.out.println("middle: " + middle);
  40.  
  41. for (int i = 0; i < intArray.getLength(); i++) {
  42.  
  43. int xKord = getWidth() / (intArray.getLength() + 2) * (i + 1);
  44. if (intArray.getValue(i) > 0) {
  45. g2d.fillRect(xKord, middle - this.makeValuePositiv(intArray.getValue(i) * faktor), getWidth() / (intArray.getLength() +2), this.makeValuePositiv(intArray.getValue(i) * faktor));
  46. g2d.setColor(shapeColor);
  47. g2d.drawRect(xKord, middle - this.makeValuePositiv(intArray.getValue(i) * faktor), getWidth() /(intArray.getLength() +2), this.makeValuePositiv(intArray.getValue(i) * faktor));
  48. g2d.setColor(drawColor);
  49. } else {
  50. g2d.fillRect(xKord, middle, getWidth() / (intArray.getLength() +2), this.makeValuePositiv(intArray.getValue(i) * faktor));
  51. g2d.setColor(shapeColor);
  52. g2d.drawRect(xKord, middle, getWidth() / (intArray.getLength() +2), this.makeValuePositiv(intArray.getValue(i) * faktor));
  53. g2d.setColor(drawColor);
  54. }
  55.  
  56. }
  57. }
  58.  
  59. }
  60. }
  61.  
  62. public void getNotifyed() {
  63. repaint();
  64. }


dies funktioniert einwandfrei und bei dem neu zeichnen der Graphik wird in der Konsole ebenfalls: Graphik neu zeichnen..... ausgegeben.

Die Idee war nun, dass ich ein Array sortiere und ich bei jeder Änderung des Arrays meine Balkengraphik neu zeichne.

Java Code:

  1.  
  2. public static void selectionSort(BalkenGraphik g,IntArray a) {
  3. for(int i = 0; i < a.getLength(); i++){
  4. a.swap(i, getIndexOfMinimum(a, i, a.getLength()-1));
  5. g.getNotifyed();
  6. System.out.println("I= "+i);
  7. try{
  8. Thread.sleep(100);
  9. }
  10. catch(Exception e) {
  11. System.out.println(e);
  12. }
  13. }
  14. }


ebenfalls funktioniert diese Methode einwandfrei und tut das was sie soll... also fast.
Mein Array hat die Länge 10 und dementsprechend wird in der Konsole folgendes ausgegeben:

I= 0
I= 1
I= 2
I= 3
I= 4
I= 5
I= 6
I= 7
I= 8
I= 9

und am Ende schließlich:

Graphik neu zeichnen.....

Das heißt, das meine Graphik erst dann neu gezeichnet wird, wenn die Methode fertig ist, aber es ist doch theoretisch möglich diesen Vorgang während des sortierens bereits zu machen, oder ??

Hat jemand eine Idee, Lösungsvorschlag, Erklärung oder ähnliches??

Bzw. getNotifyed wird tatsächlich 10 mal aufgerufen, jedoch wird das paintComponent nur ganz am ende einmal aufgerufen, warum??? :( ruft repaint() etwas nicht paintComponent(Graphics g) auf??

mfg.
Luecx


Graphik nach 100 ms neu laden

0 commentaires:

Enregistrer un commentaire