aktualisieren eines Images

Status
Nicht offen für weitere Antworten.

e9926044

Bekanntes Mitglied
Hallo,

wie kann ich von einer anderen Klasse paintComponent der unteren Klasse so aufrufen, dass mir mein BufferedImage immer wieder neu auf meinem JFrame gezeichnet wird? oder wie kann ich das machen?

Vielen DANK für eure Antworten!!

lg
Hannes


Code:
class BildPanel extends JPanel{
    private Image img1;
    private Image img2;
    private static BufferedImage bufferedImage;
    public BildPanel(Image img1, Image img2){	
        bufferedImage = new BufferedImage(320, 240, BufferedImage.TYPE_3BYTE_BGR); 
	this.img1 = img1;
	this.img2 = img2;
	}
    public BildPanel()
	{
	bufferedImage = new BufferedImage(320, 240, BufferedImage.TYPE_3BYTE_BGR);
	for(int i = 0; i < 240; i++)
	    {
	    for (int j = 0; j < 320; j++)
		BildPanel.setPixels(j, i, j*i*9000);    
	    } 
	System.out.println("Konstruktor ohne ich bins");
	this.img2 = img2;
	}
    public static void setPixels(int x, int y, int pixels)
	{
        bufferedImage.setRGB(x, y, pixels);
	}
    protected void paintComponent(Graphics g) 
	{
        super.paintComponent(g);
        g.drawImage(img1,0,0,this);
	g.drawImage(img2, 110, 73, this); 
	}
    public BufferedImage getBuffImage()
	{
	return bufferedImage;
	}
}
 
paintComponent wird nicht direkt aufgerufen.
Du kannst allerdings freundlich um ein Neuzeichnen bitten in dem du repaint() auf der Komponente aufrufst.
 
Hast du eine Idee, warum das bei mir nicht funktioniert?
ich habe in einer anderen Klasse:wie unten - geschrieben aber es ändert sich nichts
Weiß da jemand Rat?

Vielen Dank!!

lg

Code:
class OutputThread extends Thread {
    BildPanel bild = new BildPanel();              //Konstruktor
    public OutputThread()
	{
	for(int i = 0; i < 240; i++)
	    {
	    for (int j = 0; j < 320; j++)
		BildPanel.setPixels(j, i, 16777100);    //16777215 == weiß, 0 == schwarz
	    }
	bild.repaint();
	}
 
Mein Tipp:
Weil "bild" eine lokale Instanz in der Klasse "OutputThread" ist und nirgends angezeigt wird.

Abgesehen davon werd ich bei dem Code blind... Statische Methode... verschachtelte Schleife um eine rechteckige Fläche mit einer Farbe zu füllen... ein einzelner int als Farbe...

Ohgottohgottohgott 😉
 
und was kann ich da machen, dass es geht, public machen oder wie?

Vielen DANK!!

es ändert sich natürlich noch einiges!!, ich bin ja noch beim austeste!!

lg
Hannes
 
e9926044 hat gesagt.:
und was kann ich da machen, dass es geht, public machen oder wie?

Jedenfalls nicht ins Blaue raten.

Aus naheliegenden Gründen kann sich an einem angezeigten Bild nichts ändern, wenn du weder das angezeigte Bild änderst, noch dieses durch ein anderes austauschst. Von beidem ist in deinem Code nichts zu sehen. An einem eh nicht sicvhtbaren Bild kannst du natürlich dengeln wie du lustig bist, da darf es nicht weiter verwundern wenns den Bildschirm kalt lässt.
 
SO ich habe es jetzt umgeschrieben aber ich komm nicht drauf, wie ich das Image aktualisieren könnte
Vielleicht kann mirdoch jemand einen näheren Tip geben.

Vielen Dank!!

lg
Hannes


mein Code jetzt:
Code:
Klasse 1: main!!

ImageComponent displayImage = new ImageComponent();
	for(int i = 0; i < 240; i++)
	    {
	    for (int j = 0; j < 320; j++)
		displayImage.setPixels(j, i, j*i);    //16777215 == weiß, 0 == schwarz
	    } 
	img1 = displayImage.getBuffImage(); 
        add(new BildPanel(img, img1)); 


Klasse 2:

class BildPanel extends JPanel{
    private Image img1;
    private Image img2;
    public BildPanel(Image img1, Image img2){	
         
	this.img1 = img1;
	this.img2 = img2;
	}
    public BildPanel() {}
    protected void paintComponent(Graphics g) 
	{
        super.paintComponent(g);
        g.drawImage(img1,0,0,this);
	g.drawImage(img2, 110, 73, this); 
	}
}


Klasse 3:
class ImageComponent extends JComponent
{
    private BufferedImage bufferedImage;
    public ImageComponent()
    {
        bufferedImage = new BufferedImage(320, 240, BufferedImage.TYPE_INT_RGB);
    }

    public void setPixels(int Reihe, int Spalte, int pixels)
    {
        bufferedImage.setRGB(Reihe, Spalte, pixels);
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(bufferedImage, 0, 0, this);
    }
     public BufferedImage getBuffImage()
	{
	return bufferedImage;
	}
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben