2016-11-05 2 views
-1

카드 레이아웃의 일부인 패널에 이미지가 페이드 인되어 지길 원합니다. 프로그램의 특정 위치에있을 때이 패널이 맨 위에 표시 될 것이므로 이미지를 페이드 인 효과로로드하고 싶습니다. 큰 프로젝트이므로 관련 코드 만 붙여 넣습니다. 특정 이벤트가 발생하면jPanel 상단의 이미지 페이드 아웃

가 나는 등 JFrame의를 포함하는 GUI 클래스, 모든 JPanel의이이 코드를 실행합니다 :

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

그것은 올바른 패널을로드하고 정적 인 방법을 실행 패널 pLeprechaun에 이미지를 추가 할 예정인 FadeIn 클래스

가 여기에 FadeIn 클래스입니다 :

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(); 
    } 
} 

아무런 변화가없는 이미지가 패널에 표시되지 않습니다. jPanel.add (새로운 FadeIn()) 대신에 그것을 사용해보십시오. 나는 또한 새로운 jFrame을 만들고 새로운 FadeIn을 추가하려고 시도했다. 물론 이미지가 jPanel에 그려지는 대신 새로운 jFrame이 메인 이미지의 위쪽으로 튀어 나와 멋지게 페이드 인합니다.하지만 그게 내가 원하는 것만은 아닙니다.

해결 방법이 있습니까?

+0

* "'imagem = new ImageIcon ("darkforest. jpg "). getImage();'"* 1) 애플리케이션 리소스는 배포 시점까지 임베디드 리소스가 될 것이므로 지금 당장 액세스하는 것이 현명합니다. [tag : embedded-resource]는 파일이 아닌 URL로 액세스해야합니다. [info. URL을 구성하는 방법은 임베디드 리소스 페이지 (http://stackoverflow.com/tags/embedded-resource/info)를 참조하십시오. 2) 예를 들어 이미지를 얻는 한 가지 방법은 [이 Q & A] (http://stackoverflow.com/q/19209650/418556)에서 볼 수있는 이미지에 핫 링크하는 것입니다. –

+0

일반 정보 : 더 나은 도움을 받으려면 [MCVE] 또는 [짧은 내용, 자체 포함, 올바른 예] (http://www.sscce.org/)를 게시하십시오. –

답변

0

어의 이동 :

:

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

실행에 :

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

는 다음과 같이 크기를 변경해야합니다

당신은 다음의 일련의 호출을 가정

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