W
wimpf
Gast
Hallo
ich zeichne in Java 1.3 unter AWT mit folgendem überschriebenen Panel Grafiken:
Das funktioniert auch in soweit. Problem ist, dass wenn ich ImagePanels zu anderen ImagePanels hinzufüge, einige nicht immer gezeichnet werden. Das sieht dann bspw. so aus:
Der kleine Papierkorb bei Nr. 5 fehlt einfach in der Darstellung, obwohl er da ist. Wenn ich das Programm dazu zwinge das Fenster neu zu zeichnen (indem ich scrolle oder einfach ein anderes Windows-Fenster wie ein Radiergummi darüber schiebe) erscheint der Papierkorb.
Warum ist das so und warum kann ich das nicht nachvollziehen? Es fehlt mal die eine Grafik und dann die andere. Etliche repaints oder validates haben keine Änderung gebracht.
Habt ihr einen Tipp für mich?
Danke,
wimpf
ich zeichne in Java 1.3 unter AWT mit folgendem überschriebenen Panel Grafiken:
Code:
package .....;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Panel;
import java.awt.image.ImageObserver;
public class ImagePanel extends Panel implements ImageObserver{
private static final long serialVersionUID = -6364883255675338017L;
private Image myImage = null;
private Color myColor = null;
private int panelWidth = 0;
private int panelHeigth = 0;
private Image dbImage;
private Graphics dbg;
public ImagePanel (String i, int r, int g, int b, boolean opaque) {
super();
//set background if opaque = true
if (opaque) {
myColor = new Color(r, g, b);
this.setBackground(myColor);
System.out.println("set color imagepanel");
}
//read image
myImage = getToolkit().getImage(i);
MediaTracker mt = new MediaTracker(this);
mt.addImage(myImage, 0);
try {
mt.waitForAll();
} catch (InterruptedException ex) {
}
panelWidth = myImage.getWidth(this);
panelHeigth = myImage.getHeight(this);
//set
this.setLayout(null);
this.setSize(panelWidth, panelHeigth);
this.setVisible(true);
}
public void paint (Graphics g) {
super.paint(g);
//set background image
g.drawImage(myImage, 0, 0, this);
}
public void update (Graphics g) {
//initialize double buffer
if (dbImage == null) {
dbImage = createImage (this.getSize().width, this.getSize().height);
dbg = dbImage.getGraphics ();
}
System.out.println("w "+this.getSize().width);
System.out.println("h "+this.getSize().height);
System.out.println("b "+getBackground ());
//clear screen
dbg.setColor (getBackground ());
dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);
//paint foreground
dbg.setColor (getForeground());
paint (dbg);
//draw picture
g.drawImage (dbImage, 0, 0, this);
}
public void setImage (String i) {
//read image
myImage = getToolkit().getImage(i);
MediaTracker mt = new MediaTracker(this);
mt.addImage(myImage, 0);
try {
mt.waitForAll();
} catch (InterruptedException ex) {
}
}
public Dimension getMinimumSize() {
Dimension temp = new Dimension(panelWidth, panelHeigth);
return temp;
}
public Dimension getPreferredSize() {
return getMinimumSize();
}
}
Das funktioniert auch in soweit. Problem ist, dass wenn ich ImagePanels zu anderen ImagePanels hinzufüge, einige nicht immer gezeichnet werden. Das sieht dann bspw. so aus:

Der kleine Papierkorb bei Nr. 5 fehlt einfach in der Darstellung, obwohl er da ist. Wenn ich das Programm dazu zwinge das Fenster neu zu zeichnen (indem ich scrolle oder einfach ein anderes Windows-Fenster wie ein Radiergummi darüber schiebe) erscheint der Papierkorb.
Warum ist das so und warum kann ich das nicht nachvollziehen? Es fehlt mal die eine Grafik und dann die andere. Etliche repaints oder validates haben keine Änderung gebracht.
Habt ihr einen Tipp für mich?
Danke,
wimpf