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
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:
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?
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: