2016-11-05 2 views
-1

Ich möchte, dass ein Bild in ein Panel eingeblendet wird, das Teil eines Kartenlayouts ist. Wenn ich an einer bestimmten Stelle im Programm bin, wird dieses Feld oben angezeigt und ich möchte, dass das Bild mit einem Einblendeffekt geladen wird. Dies ist ein großes Projekt, also werde ich nur den relevanten Code einfügen.Ein Bild über einem jPanel einblenden

ich eine GUI-Klasse haben, die die JFrame enthält, alle JPanels usw. Wenn ein bestimmtes Ereignis ausgelöst wird, dieser Code ausgeführt wird:

cardMain.show(pMain, "cLeprechaun"); 
FadeIn.run(pLeprechaun); 

Es lädt die richtige Platte auf und läuft dann eine statische Methode in die FadeIn-Klasse, die das Bild auf dem Panel pLeprechaun hinzufügen soll.

Hier ist die FadeIn Klasse:

import java.awt.AlphaComposite; 
import java.awt.Component; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class FadeIn extends JPanel implements ActionListener { 

    Image imagem; 
    Timer timer; 
    private float alpha = 0f; 

    public FadeIn() { 
     imagem = new ImageIcon("darkforest.jpg").getImage(); 
     timer = new Timer(100, this); 
     timer.start(); 

    } 
    // here you define alpha 0f to 1f 
    public FadeIn(float alpha) { 
     imagem = new ImageIcon("darkforest.jpg").getImage(); 
     this.alpha = alpha; 

    } 
    @Override 
    public void paintComponent(Graphics g) { 
     System.out.println("paint"); 
     super.paintComponent(g); 

     Graphics2D g2d = (Graphics2D) g; 

     g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 
                alpha)); 
     g2d.drawImage(imagem, 0, 0, null); 

    } 

    public static void run(JPanel jPanel) { 
     jPanel.add(new FadeIn()); 
    } 


    public void actionPerformed(ActionEvent e) { 
     alpha += 0.05f; 
     if (alpha >1) { 
      alpha = 1; 
      timer.stop(); 
     } 
     repaint(); 
    } 
} 

Nichts geschieht, ist kein Bild auf der Platte zeigen. Nur um es auszuprobieren, statt jPanel.add (new FadeIn()); Ich habe auch versucht, einen neuen jFrame zu erstellen und ein neues FadeIn hinzuzufügen, und es funktioniert dann. Statt eines Bildes, das auf dem jPanel gemalt wird, erscheint natürlich ein neues jFrame über dem Hauptfenster, und das Bild wird schön eingeblendet. Aber das ist nicht das, was ich will.

Gibt es eine Möglichkeit, dies zu lösen?

+0

* "' image = neues ImageIcon ("dunkler Wald. jpg "). getImage();' "* 1) Anwendungsressourcen werden zum Zeitpunkt der Bereitstellung zu eingebetteten Ressourcen, weshalb es ratsam ist, sie im Moment so zu nutzen, als ob sie gerade wären. Auf ein [tag: embedded-resource] muss nicht die Datei, sondern die URL zugreifen. Siehe [Info. Seite für eingebettete Ressource] (http://stackoverflow.com/tags/embedded-resource/info) zum Erstellen der URL. 2) Eine Möglichkeit, Bilder für ein Beispiel zu erhalten, besteht darin, eine direkte Verbindung zu Bildern herzustellen, die in [diesem Q & A] (http://stackoverflow.com/q/19209650/418556) zu sehen sind. –

+0

Allgemeiner Tipp: Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. –

Antwort

0

Er go:

vorausgesetzt, Sie die folgende Reihenfolge der Anrufe:

JFrame f=new JFrame(); 
f.setSize(500, 500); 
JPanel j=new JPanel(); 
f.add(j); 
f.setVisible(true); 
FadeIn.run(j); 

Sie die Größe wie folgt zu ändern:

public FadeIn(Dimension d) { 
    setSize(d); 
    .... // the rest of set up 
} 

dann in Lauf:

run(Jpanel jPanel) { 
    jPanel.add(new FadeIn(jPanel.getSize())); 
} 
Verwandte Themen