Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe nen Problemchen bei meinem Programm. Das Problem sieht folgendermaßen aus...
Ich möchte ein Bildchen auf einen Canvas zeichnen, dies hat auch schon geklappt. Ich lade das Bild erst in nen Image, von dort gehts dann auf Graphics von Canvas. So weit so gut.
Allerdings will ich, dass das Bild neu gezeichnet wird sobald aus irgend einem Grund das Bild nicht mehr komplett angezeigt wird. Zum Beispiel weil ich ein Fenster über den Canvas gezogen habe oder ich das Programm minimiert und dann wieder maximiert habe. Ich habe schon ComponentShown, Resize usw probiert, allerdings immer ohne Erfolg.
Hat jemand von euch ne Idee wie ich dies umsetzen könnte? Kann ne andere Komponente das mit dem Zeichnen vielleicht besser?
Ich weiß, gehört hier nicht rein aber wollte ned noch nen 2. Thread aufmachen...
Des weiteren bekomme ich keine Hilfe angezeigt wenn ich F1 drücke während ich ne Komponente markiert habe (das Hilfefenster öffnet sich aber). Weiß jemand wie ich das beheben kann damit ich in der Hilfe gescheit rumwühlen kann, bzw wo ich die Hilfe überhaupt her bekomme.
Allerdings will ich, dass das Bild neu gezeichnet wird sobald aus irgend einem Grund das Bild nicht mehr komplett angezeigt wird. Zum Beispiel weil ich ein Fenster über den Canvas gezogen habe oder ich das Programm minimiert und dann wieder maximiert habe.
Darum kümmert sich die VM schon alleine, du hast sicher einen Fehler im Code. Die VM ruft die paint()-/repaint()-Methode auf, sobald etwas aus oben angeführten Gründen neu gezeichnet werden muss.
Steve-H hat gesagt.:
Kann ne andere Komponente das mit dem Zeichnen vielleicht besser?
Kommt drauf an, ob du mit Swing oder AWT arbeitest.
Steve-H hat gesagt.:
Ich weiß, gehört hier nicht rein aber wollte ned noch nen 2. Thread aufmachen...
Des weiteren bekomme ich keine Hilfe angezeigt wenn ich F1 drücke während ich ne Komponente markiert habe (das Hilfefenster öffnet sich aber). Weiß jemand wie ich das beheben kann damit ich in der Hilfe gescheit rumwühlen kann, bzw wo ich die Hilfe überhaupt her bekomme.
Müsste ich dem Canvas nicht irgendwie sagen was er bei Repaint neu malen soll? Wenn ich allerdings auf den Canvas klicke habe ich da keinen Event der Repaint oder so heißt.
Hier mal der Code von den betroffenen Funktionen:
Code:
//damit lade ich das Bild von der Platte in nen Image
protected Image LoadGrafic(String szDN) throws IOException
{
Image Image;
File imageFile;
//Datei öffnen und in Buffer laden
imageFile = new File(szDN);
Image = ImageIO.read(imageFile);
return Image;
}
//dann hole ich mir folgendermaßen die Graphics vom Canvas
gWorldMap = canvasWorld1.getGraphics();
//und hier soll er das ganze auf den canvas pinseln. In imgWorldMap ist das geladene Image
gWorldMap.drawImage(imgWorldMap, 0, 0, rootPane);
habe die drawImage habe ich in den verschiedenen Events (shown, resize usw) mal eingesetzt, allerdings wollte das Bild als nur beim Click Event erscheinen.
Bezüglich Swing und AWT. Daher ich mehr als neu in Java bin, habe bisher nur C/C++ gemacht, kenne ich mit denen noch ned so recht aus. Habe von beiden mal Komponenten genommen, jenachdem wo ich die Komponente gefunden habe die ich brauchte.
Das mit der Hilfe war auf die Hilfe von NetBeans bezogen. Wenn ich F1 drücke um die Hilfe aufzurufen sagt er mir immer dass keine Hilfe für das ausgewählte Objekt (z.B. dem ComponentShown Event) hinterlegt ist. Aber auf der NetBeans Seite wurde ich nicht fündig nach ner Hilfe die man runterladen kann und dann einbinden.
Und ohne das Graphics Objekt kann ich ja kein drawImage machen und somit auch nicht das Bild auf das Graphics Obejct zeichnen damit es danach auf dem Canvas dargestellt wird.
Du solltest deine Klasse von Canvas erben lassen (wenn du ein AWT-Programm schreibst) und darin die paint()-Methode überschreiben. In der paint()-Methode zeichnest du dann. Das Graphics-Objekt bekommt die paint()-Methode von der VM als Argument übergeben.
Mein Klasse erbt schon von JFrame, allerdings habe ich das mit dem überschreiben auch ohne das Vererben versucht.
Es klappt so halber. Er zeichnet das Bild zwar neu, zumindest in den meisten Fällen, allerdings wird das Bild als links oben ausgerichtet. Was wohl an den Paramtern in ImageDraw liegt.
Ein weiteres Problem ist, dass ich insgesamt 3 Canvas habe, auf 3 unterschiedlichen Panels eines JTabbedPane, auf die jeweils was verschiedenes gepinselt werden soll. Auf die Art und Weise würde ja dann immer das gleiche in den 3 Canvas drin stehen da das Image immer das gleiche ist.
allerdings malt er dann noch immer links oben rum. Wenn ich anstatt "g" die gespeicherte Graphics (zum Beispiel gWorldMap) verwende, dann sieht es so aus als würde das Bild zuerst auf den Canvas gezeichnet. Dann aber sofort wieder überzeichnet.
Da haben wir schon das nächste Problem, ich dachte, du würdest auf meine Hinweise anspringen.
Vermeide es AWT und Swing zu mischen. Canvas ist eine schwergewichtige AWT-Componente. Ersetze die durch ein leichtgewichtiges JPanel und überschreibe in den erbenden Klassen die paintComponent()-Methode zum zeichnen.
Die bisher benutzten Methoden zum Zeichnen kannst du beibehalten.
Ok, ich werd das tun sobald mein Besuch wieder weg ist. Kann allerdings ne Weile dauern.
Ich wünsch dir nen schönen Abend und vielen Dank für deine Hilfe bisher.
btw, ich habe dich mal in ICQ geadded, dass wir eventuell dort reden können (falls es dir recht ist), dann schreibe ich hier nicht das Forum zu ;-)
mfg
Edit: das Problem hat sich gelöst. Ich habe ne neue Klasse hinzugefügt welche von JPanel erbt und dort das malen rein gemacht. Daraus erzeuge ich nen Objekt und weise es dem Panel in der Grafik zu.