# paintComponent() aufrufen



## e9926044 (14. Mrz 2007)

Hallo,

ich habe eine Klasse (von diesem Forum - Danke Marco13 und WildCard) zum Setzen einzelner Pixel auf einem BufferedImage.
in der Klasse GetData habe ich ein Objekt der Klasse ImageComponent erzeugt und mit der Methode setPixel setze ich die einzelnen Pixel (angegeben ist es in der Klasse ImageComponent mit 240 * 320, ich habs ein bisschen kleiner gemacht), 
Meine Frage wäre jetzt, wie ich die Methode paintComponent explizit in der Klasse GetData aufrufen kann, damit mein Image angezeigt wird?, oder geht das irgendwie anders?

Vielen Dank für EURE Antworten!!

lg
Hannes




Klasse GetData


```
ImageComponent bildAnzeige = new ImageComponent();   // Objekt der Klasse ImageComponent 
public int[] input = new int[8];      
  
       wertInput = inData.read();

        input[0] = wertInput & 0x80;
	input[1] = wertInput & 0x40;
	input[2] = wertInput & 0x20;
	input[3] = wertInput & 0x10;
	input[4] = wertInput & 0x08;
	input[5] = wertInput & 0x04;
	input[6] = wertInput & 0x02;
	input[7] = wertInput & 0x01;
	 for (int i = 0; i < 8; i++)
	    {
 	    bildAnzeige.setPixels((k*8)+i, p, input[i]);            // einzelne Pixel setzen
	    }
        if (k > 20)                                                             //etwas kleiner als in Klasse ImageComponent angeg
	   {
		k = 0;
		p++;
	   }
	if (p > 130)                                                           //etwas kleiner als in Klasse ImageComponent angeg
	   {
		p = 0;
		state = 40;
	   }
	k++;
```



Klasse ImageComponent 

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

    public void setPixels(int x, int y, int pixels)
    {
        // wandle String um in Pixel
       // int rgb = 0; // ... schwarz oder weiß
	
        bufferedImage.setRGB(x, y, pixels);
    }

    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        g.drawImage(bufferedImage, 200, 200, this);
    }
   
}
```


----------



## Chris_1980 (14. Mrz 2007)

man ruft die Methode normalerweise nicht direkt auf. Du kannst repaint() aufrufen, und die Component damit zum neuzeichnen markieren.


----------



## e9926044 (14. Mrz 2007)

Hallo,

ja aber mein Problem ist auch, dass ich in einer dritten klasse schon ein Image auf meinem Fenster anzeige (Code unten),
Muss ich da nicht dann, wenn ich das BufferedImage fertig habe irgendwie mit add(new ImageComponent()) irgendwie das BufferedImage zu meinem Client- Fenster hinzufügen?

VIELEN DANK FÜR DIE ANTWORTEN!!

lg
Hannes


Klasse Client:


```
public class Client extends JFrame {
    private Image img;
    
    public ClientVNC() 
	{       
        img = getToolkit().getImage("C:\\mg1.png");   
	MediaTracker mt = new MediaTracker(this);
        mt.addImage(img, 0);
        try {
            mt.waitForAll();
	    }  
	catch (InterruptedException e) 
	    {
	    }
        initComponents();
	setLayout(new BorderLayout());
        add(new BildPanel(img));                                    // hier wird das erste Image hinzugefügt
	addMouseListener(new DedectMouseListener());
	addMouseMotionListener(new MausGezogen());
	repaint();
	}
...


Klasse BildPanel:

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


----------

