Updaten der Grafik / zu schnell?

AGSzabo

Mitglied
Appletgröße ändern / Updaten der Grafik / zu schnell?

Hallo alle Interessenten,

ich habe ein Applet das beim Ändern der Fenstergröße resized wird und zwar durch Wertzusweisungen in seine .width und .height Attribute. Der Witzt ist, machmal funktioniert dass und manchmal nicht. Ich meine, man sieht zwar an der Grauen Box dass das Applet größer wird, aber die Grafik darin "kommt nicht mt". Koennte es sein, dass irgendwas mit dem Timing nicht stimmt, dass zB die Update-Routine für den Breitenwert noch läuft wenn das selbe für die Höhe aufgerufen wird? Muss ich da irgendwie Signale setzen? Oder kann ich iregndwie erreichen, dass das Update erst stattfindet, wenn ich beide Werte also Höhe und Breite fertig zugewiesen habe?

Klar ist mir blos, dass automagisch

Code:
public void update(Graphics g) { paint(g); }

aufgerufen wird wenn ich die Attribute der Höhe oder der Breite verändere. Das Programm im Source findet ihr da: http://www.majorchaos.de/hitomi.java und das kompilierte Applet mitsamt zugehörigem html und script: http://www.majorchaos.de/hitomi.html (mach das Fenster mit dem Titelleistenbutton kleiner und größer um das Problem zu sehen).

Also woran liegts? Bzw wie mache ich " Warten auf Signale" wenn das nötig ist?


ps: wenn ich das Fenster an der Ecke packe und größer oder kleiner ziehe, dann funktioniert es immer mit der Größenänderung. Blos wenn ich die Schaltfläche in der Fenstertitelleiste benutze, gibts probleme, wahrscheinlich weil das zu schnell geht. Ich meine, die Höhe wird verändert während die Änderung der Breite noch nicht abgschlossen ist.

pps: ich sehe gerade, dass von mir im Script blos der Höhenwert des Applets verändert wird. Der Breitenwert wird von der HTML Engine automatisch auf 100% des Elternelements gesetzt. Also mir scheint, ich versuche die Höhe zu ändern bevor die neue Breite im Applet "ganz angekommen" ist. ... Oder vielleicht irgendwie umgekehrt...

ppps: hier ist der paint-Code, der fuer die Bildgröße zuständig ist:

Code:
  public void paint(Graphics g) {
    Dimension d = new Dimension(this.getSize().width, this.getSize().height);

    // Create the offscreen graphics context
    if ((offGraphics == null)
     || (d.width != offDimension.width)
     || (d.height != offDimension.height)) {
        offDimension = d;
        offImage = createImage(d.width, d.height);
        offGraphics = offImage.getGraphics();//(Graphics2D)offImage.getGraphics();
    }

    // pixel diameter of the full wheel
    if (d.width<d.height) {as = d.width;} else {as = d.height;}

    //hack wheelsize to be based on a constant ring width
    if (!fullsize) as = rings*25*2;
    
    
    //status
    if ((null == thisbook && !filenotfound) || hit[5] == null) {
       g.drawString("reading "+filename, 0, 10);
     } else if (filenotfound) {
       g.fillRect(0, 0, d.width, d.height);
       g.drawString("file not found", 0, 10);
    }
    if (null != thisbook) {

      // Erase the previous image
      offGraphics.setColor(colors[colorstyle][back]);
      offGraphics.fillRect(0, 0, d.width, d.height);

      fm = g.getFontMetrics();
      lh=fm.getAscent()+fm.getDescent();
      
      // draw the buttons where they are
      hit[5-(direction+1)/2].paintIcon(this,offGraphics,as-24,0);
      if (fullsize) {
        hit[orientation].paintIcon(this,offGraphics,as-55,0);
        hit[6].paintIcon(this,offGraphics,as-55,31); // LINE
        hit[7].paintIcon(this,offGraphics,as-24,31); // rings with note
        hit[8].paintIcon(this,offGraphics,as-74,0);  // +/-

	//draw copyright and version
        offGraphics.setColor(Color.gray);
        offGraphics.drawString(ver,0,as-fm.getDescent());
        offGraphics.drawString(by,as-fm.stringWidth(by),as-fm.getDescent());

        //the dots legend
        legend(offGraphics);
      }

      //draw the wheel
      pendant(offGraphics);
      printvalue(offGraphics);

      // Paint the image onto the screen
      g.drawImage(offImage, 0, 0, null);
    }
  }

pppps: ich habe irgendwo gelesen dass eine refreshroutine nach 100 millisekuden abgebrochen wird... bin etwas verwirrt davon. vielleicht ist das die antwort auf meine frage? aber was kann ich da machen?
 
Zuletzt bearbeitet:
100ms timeout bei update(Graphics g) / oder update bricht update ab?

Hi,

nachdem meine lange und komplizierte anfrage nix gebracht hat, hier nochmal das Problem nach meinen neusten Erkenntnissen kurz und bündig: die Routine, die durch paint(Graphics g) aufgerufen wird, dauert länger als 100ms bzw wird dann oder auch wenn der nächste Aufruf von paint() rein kommt, abgebrochen. Sie soll aber immer fertiglaufen bzw der zweite Update sollte warten bis der erste fertig ist. Was kann ich da machen? Auf meinem Laptop, der sehr schnell ist, gibts das Problem nicht.

danke für euer Verständnis,
Gruesse,
AGS

ps: den source gibts da: http://www.majorchaos.de/hitomi.java, das fertige applet da: http://www.majorchaos.de/hitomi.html


//edit

ich habe jetzt die Zeile

// public void update(Graphics g) { paint(g); }

auskommentiert, aber das Problem besteht nach wie vor.
 
Zuletzt bearbeitet:
Hey,
weiß nicht genau ob es was bringt aber füg doch mal ein

update(getGraphics());

ein vielleicht hilft das wobei im Normalfall auch da ein repaint gemacht wird. aber ein Versuch ist es wert.

Gruß
 
Zurück