# Ein Image langsam einblenden und nach 5 Sekunden ausblenden?



## Guest (7. Jun 2006)

Ich habe ein allgemeines Verständnisproblem.
Ich möchte ein Spiel programmieren. Am Anfang soll ein Intro eingeblendet werden.
Als Intro soll ein Bild langsam eingeblendet werden, einige Zeit präsentiert und langsam ausgeblendet wird.
In einer Hauptklasse wird ein JFrame erzeugt. In der Intro klasse wird ein JLabel Objekt erzeugt:



```
JLabel img = new JLabel(new ImageIcon(getClass().getResource("titelbild.jpg")));
```

Das wiederum wird in der Hauptklasseüber ein JPane in dem JFrame dargestellt:

```
Container contentPane=getContentPane();
contentPane.setLayout( new FlowLayout() ); 
contentPane.setBackground(new Color(255, 255, 255));
               
                
Pane2 = new JPanel();
Pane2.setLayout( new BorderLayout() );
Pane2.setBackground(new Color(255, 25, 255));
Pane2.setPreferredSize(new Dimension(700,500));
Pane2.setMaximumSize(new Dimension(700,500));
Pane2.setMinimumSize(new Dimension(700,500));
Pane2.setVisible(true);

Intro intro = new Intro();
test = intro.Intro();
Pane2.add(test);
contentPane.add(Pane2);
```


Gibt es erstmal einen einfacheren Weg um das JLabel direct in das JFrame zu platzieren?

Und ist so was mit Image langsam einblenden und ausblenden möglich?


----------



## el_vital (7. Jun 2006)

sorry, hab vergessen mich einzulogen. Bin neue hier!  :wink:


----------



## Wildcard (7. Jun 2006)

Einfacheren weg? Ist doch nur eine Zeile ???:L 

```
panel.add(label)
```
Zum ein und ausblenden musst die mit Threads und Transparenz arbeiten.
Um ein wenig einlesen wirst du nicht herumkommen


----------



## el_vital (7. Jun 2006)

wo kann ich was über Transparenz nachlesen?

die Schritte könnte ich ja einfach in einer for-Schleife mit

```
try {
      Thread.sleep(5);
      } catch (InterruptedException ex) {
       }
```

erreichen!?


----------



## Wildcard (7. Jun 2006)

Ja, die Schritte kannst du so erreichen.
Für den Effekt darzustellen empfehle ich dir das Bild nicht als ImageIcon auf ein Label zu packen, sondern bei einer 
JComponent die painComponent() zu überschreiben und dort das Bild zu zeichnen.
Dem dort übergebenen Graphics Objekt kannst du einen Alpha-Wert für die Transparenz setzen.


----------



## el_vital (7. Jun 2006)

Ich habe es jetzt erstmal so gemacht:

```
class Startseite extends JPanel {

    private Image image ;
    private BufferedImage buffer ;


    Startseite () {
        loadImage();
    }

    private void loadImage() {

        image = Toolkit.getDefaultToolkit().getImage(getClass().getResource("titelbild2.jpg"));

        if (image == null) {System.out.println("Fehler, kann bild nicht finden") ; }

        System.out.println(image.toString()) ;
        MediaTracker mt = new MediaTracker(this) ;

        try {

            mt.addImage(image, 0) ;
            mt.waitForID(0) ;

        }catch(InterruptedException er) {}

        int imgW = image.getWidth(this) ;
        int imgH = image.getHeight(this) ;


        buffer = new BufferedImage(imgW,imgH, BufferedImage.TYPE_INT_ARGB) ;
        Graphics2D g2 = buffer.createGraphics() ;

        g2.drawImage(image, 0,0,this) ;

        g2.dispose() ;

    }

    protected void paintComponent(Graphics g) {


        Graphics2D g2 = (Graphics2D) g;
        Composite alpha = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.2f) ;
        g2.setComposite(alpha) ;
        Dimension size = getSize() ;


        int imgW = image.getWidth(this) ;
        int imgH = image.getHeight(this) ;
        for (int row = 0 ; row < size.height ; row += imgH) {

            for (int col = 0 ; col < size.width ; col += imgW) {
                g2.drawImage(image, col,row,this) ;

            }
        }
        super.paintComponent(g);
    }
}
```

debei kann ich ja den SRC_OVER Wert zwischen 1.0 und 0.0 ändern.
Es ist z.B. bei 0.5 transparent. Bei 1.0 ist die Oberfläche dunkel und das Bild garnicht zu sehen. Bei 0.0 ist es hell und das Bild ist ebenfalls nicht zu sehen.

Wie kann ich es machen, dass das Bild voll zu sehen ist?


----------



## el_vital (7. Jun 2006)

kann mir keiner weiter helfen?

Jetzt funktioniert alles, es wird eingeblendet, nur nicht zu ende.
Es bleibt noch einwenig transparent...


----------



## Guest (7. Jun 2006)

el_vital hat gesagt.:
			
		

> Ich habe es jetzt erstmal so gemacht:
> 
> ```
> class Startseite extends JPanel {
> ...


ich glaube, du musst den hintergrund auch neu zeichnen, sonst überlagert es sich bis es schwarrz wird...bin aber auch ein newbie auf dem gebiet und habe mir deinen code nicht genau durchgelesen


----------



## el_vital (7. Jun 2006)

es wird alles neu gezeichnet, aber...
Wenn alpha Wert bei 0.0 ist, ist es weis. Bis ca. 0.2 wird das Bild eingeblendet und ab da bleibt es einwenig transparent, danach wird es immer dunkler bis es bei 0.99 ganz grau ist.


----------



## el_vital (7. Jun 2006)

ok, ich habe raus gefunden woran es lag.
Sobald ich folgendes rauskomentiert habe, lief es:


```
super.paintComponent(g);
```

kann mir jemand kurz erklären was diese Zeile bewirkte?


----------



## Leroy42 (8. Jun 2006)

Sie ist hauptsächlich dafür verantwortlich den Hintergrund (Farbe) zu zeichnen.


----------

