Hallo,
ich habe ein Problem mit meinen Icons. Ich muss diverse Icons auf ein JPanel zeichnen. Da es aber nicht gerade wenig sind und die gleichzeitig mit dem Zeichnen vom Hintergrund geschehen kann, hab ich es mit Threads versucht. Die Icons werden zwar auch gezeichnet, aber bleiben nicht auf der Bildfäche, sonder verschwinden wieder und werden dann wieder gezeichnet. Wenn ich das ganze ohne Threads mache, hab ich dieses Problem aber nicht.
Vielleicht sieht sieht ja jemand meinen Fehler.
Danke.
ich habe ein Problem mit meinen Icons. Ich muss diverse Icons auf ein JPanel zeichnen. Da es aber nicht gerade wenig sind und die gleichzeitig mit dem Zeichnen vom Hintergrund geschehen kann, hab ich es mit Threads versucht. Die Icons werden zwar auch gezeichnet, aber bleiben nicht auf der Bildfäche, sonder verschwinden wieder und werden dann wieder gezeichnet. Wenn ich das ganze ohne Threads mache, hab ich dieses Problem aber nicht.
Vielleicht sieht sieht ja jemand meinen Fehler.
Danke.
Code:
public class IconThread extends JPanel implements Runnable{
Graphics g;
String sep;
BufferedImage bimage =new BufferedImage(20,20,BufferedImage.TYPE_INT_ARGB);
ImageIcon icon = new ImageIcon();
final static Color farbe_rgb[]={new Color(210,20,0), new Color(60,60,200), new Color(250,120, 0),
new Color(148,0,212), new Color(185,135,11), new Color(0,106,250),
new Color(176,156,156), new Color(145,172,183)};
IconThread(Graphics g, String sep)
{
this. g = g;
this.sep = sep;
new Thread(this).start();
}
public void run()
{
zeichneIcon(g);
}
public void zeichneIcon(Graphics g)
{
//System.out.println("len: "+Karte.zeichenDaten.length);
MediaTracker mt = new MediaTracker(new JPanel());
String tmp = "";
String pfad = "";
int index =0;
Point view = Karte.scrollpane.getViewport().getViewPosition();
int viewX = (int)(view.getX()/256);
int viewY = (int)(view.getY()/256);
// System.out.println("viewX: "+viewX+" vviewY: "+viewY);
boolean[][] gezeichnet = new boolean[500][500];
for(int i=0, l = Karte.zeichenDaten.length; i< l; i++)
{
int x = Karte.zeichenDaten[i][9];
int y = (Karte.canY- Karte.zeichenDaten[i][10]-6-6);
if( x > viewX && x < viewX+500 && y > viewY && y < viewY+500 )
{
if( !gezeichnet[x][y] )
{
gezeichnet[x][y]=true;
String pfad = blabla;
try{
//System.out.println("pfad: "+pfad);
bimage = ImageIO.read(new File(pfad));
}catch(Exception e){System.out.println("Grafik-Datei nicht gefunden");}
int farbe = Karte.zeichenDaten[i][8];
bimage = richtigeFarbe(bimage, farbe);
bimage.flush();
mt.addImage(bimage,i);
try{
mt.waitForID(i);
}catch(InterruptedException ie)
{
bimage = null;
return;
}
g.drawImage(bimage, x, y, 20, 20 , this);
// System.out.println("zeichne Bild");
// repaint();
}
}
}
}
public synchronized BufferedImage richtigeFarbe(BufferedImage bimg, int farbe)
{
BufferedImage ret = bimg;
if(farbe>=0)
{
Color setting = farbe_rgb[farbe]; // Die Farbe setting ist die jenige, die gesetzt werden soll
for(int i = 1, l = bimg.getWidth(); i<l; i++)
for (int j = 1,m =bimg.getHeight() ; j < m; j++)
if(bimg.getRGB(i,j)==Color.BLACK.getRGB())
ret.setRGB(i,j,setting.getRGB());
}
else
System.out.println("Partei-ID ist keine Farbe zugeordnet.");
return ret;
}
}