Problem mit repaint()

Mazzok

Grünschnabel
Hallo

Ich habe eine Bildmatrix, die im folge eines Berechnugsprozesses zeilenweise berechnet wird
um die wartezeit zu verkürzen, hätte ich gerne dass wennimmer eine zeile fertig berechnet ist, diese auch in ein kleines bildchen gezeichnet wird
nur leider scheint der synchrone aufruf von repaint() nicht so wirklich zu funktionieren

Hier mein Code
in 2 for schleifen wird die bildmatrix durchlaufen, wenn X einmal durchgelaufen ist,wird das float zeilen array an die funktion übergeben die die zeile malen soll
Code:
	for(int y=0;y < Y; y ++){
             ImageMatrixLine = new float[X];
			for(int x =0; x < X;x++){
                         ....
                         Fülle die ImageMatrixLine
                          .....
			}
                 displayImageLine(ImageMatrixLine);
                }
hier die funktion displayImageLine, counterYist auf 0 gesetzt
jLabel1 wird am beginn des programms aus einem Image Icon aufgebaut, und stellt die Bildfläche dar, g ist ein graphics2D objekt und ist im varioablen teil deklariert
Code:
for(int x = 0;x < line.length;x++){
           Color c = bekomme eine Farbe nach berechnungsprozess
               g.setColor(c);
                System.out.println("draw rect"+x+","+counterY);
                g.drawRect(x, counterY, 1, 1);
        }
        jLabel1.repaint();
        counterY++;

Ich bin wirklich ien bißchen ratlos, offenbarhabe ich einen komplett falschen ansatz, um das synchron zu lösen!


Lg
maz
 
Versuchs mal so!

PHP:
import java.awt.*;
import javax.swing.*;
import java.util.*;

public class Main extends JFrame implements Runnable
{
    static final int MAX_SPEED = 40;
    static int w;
    static int h;
    static int x = 0;
    Main()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600,300);
        setTitle("Main");
        setVisible(true);

        new Thread(this).start();
    }
    public void run()
    {
        try
        {
            while(true)
            {
                repaint();
                Thread.yield();
                w = this.getWidth();
                h = this.getHeight();
                Thread.sleep(MAX_SPEED);
            }
        }
        catch(Exception e)
        {}
    }
    static Random random;
    static int[] star_x = new int[100];
    static int[] star_y = new int[100];
    public static void Sterne(Graphics g)
    {
        random = new Random();
        for(int i=0;i<star_x.length;i++)
        {
            star_x[i] = (random.nextInt()>>>1)%(w+1);
            star_y[i] = (random.nextInt()>>>1)%(h+1);
        }
        for(int i=0;i<star_x.length;i++)
        {
            g.setColor(new Color(255,255,255));
            g.drawRect(star_x[i],star_y[i],1,1);
            star_y[i]++;
            if(star_y[i]>h)
            {
                star_y[i] = 0;
            }
        }
    }
    public void paint(Graphics g)
    {
        g.setColor(new Color(0,0,0));
        g.fillRect(0,0,w,h);
        Sterne(g);
    }
    public static void main(String[] args)
    {
        new Main();
    }
}

Bei der
Code:
public static void sterne(){}
musst du deine 2 Schleifen schreiben, aber ich hab es so gemacht und es klappt!

Hoffe dass ich helfen konnte!;-]
Wenn nicht dann mekern!;-)
 
Zurück