ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
438
438
EMPFEHLEN
-
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 :1
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
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?Geändert von AGSzabo (18.11.08 um 11:26 Uhr) Grund: paint-code eingefügt
-
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.Geändert von AGSzabo (19.11.08 um 19:55 Uhr)
-
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ß
-
Wo soll ich das einfügen und mit welchem Funktionsinhalt?
-
Da rein wo du die Komponenten lädst.
Wie Inhalt? Einfach so wies da steht ?!
-
nee, hat nix gebracht. aber danke für dein entgegenkommen.
Ähnliche Themen
-
[C#] Grafik anderer Grafik folgen?
Von Major18 im Forum .NET Grafik und SoundAntworten: 4Letzter Beitrag: 13.09.08, 11:51 -
Grafik über einer anderen Grafik mit sensitiven verweisen bewegen
Von matthoz im Forum Javascript & AjaxAntworten: 12Letzter Beitrag: 20.06.06, 19:28 -
Rechteckige Grafik Uploaden und rundeckige Grafik bekommen
Von Callboy im Forum PHPAntworten: 4Letzter Beitrag: 02.12.04, 13:56 -
Preloader! Ladebalken ist eine grafik < die grafik soll sich aufbauen hilfe?
Von ChristianNierich im Forum Flash PlattformAntworten: 1Letzter Beitrag: 13.08.04, 23:04 -
GD-generierete Grafik in existierende Grafik einfuegen...
Von majonaise im Forum PHPAntworten: 3Letzter Beitrag: 26.01.04, 10:11





Zitieren
Login





