2017-05-04 21 views
1

코드를 창에 표시하는 것과 같은 간단한 기능으로 축소했습니다. 그런데 왜 그림이 나타나지 않는데? JFrame을 만든 다음 그림을 보여줄 것으로 예상되는 JPanel을 만듭니다. 그런 다음 프레임에 패널을 추가하십시오. 그런데 그림을 가져 와서 URL을 얻기 위해 두 번 클릭했습니다.이미지가 창에 표시되지 않습니다.

import java.awt.*; 

import javax.swing.*; 

import com.sun.prism.Graphics; 

public class GUI { 
    JFrame frame=new JFrame("My game"); 
    JPanel gamePanel=new JPanel(); 

    public static void main(String[] args){ 
     GUI gui=new GUI(); 
     gui.go(); 
    } 

    public void go(){ 

     frame.setSize(300, 400); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     Background backPic=new Background(); 
     backPic.setVisible(true); 
     frame.getContentPane().add(backPic);   

     JPanel contentPane=(JPanel) frame.getContentPane(); 
     contentPane.setOpaque(false); 

     frame.setVisible(true); 
     } 

    class Background extends JPanel{ 
      public void paintComponent(Graphics g){ 
       ImageIcon backgroundIcon=new   ImageIcon("file:///E:/eclipse/EL/backgroundPicture.jpg"); 
       Image backgroundPic=backgroundIcon.getImage(); 

       Graphics2D g2D=(Graphics2D) g; 
       g2D.drawImage(backgroundPic,0,0,this); 
      } 
     } 
} 

답변

2

com.sun.prism.Graphics을 가져 왔기 때문입니다. java.awt.Graphics이어야합니다.

경로에서 "file : ///"비트도 제거합니다. 또한 각 페인트 이벤트에서 이미지를로드하고 싶지 않을 수도 있습니다. 여기에 배경 클래스의 더 나은 버전입니다 -

class Background extends JPanel { 

    Image backgroundPic; 

    public Background() { 
     ImageIcon backgroundIcon=new ImageIcon("E:/eclipse/EL/backgroundPicture.jpg"); 
     backgroundPic=backgroundIcon.getImage(); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2D=(Graphics2D) g; 
     g2D.drawImage(backgroundPic,10,10,this); 
    } 
} 
+2

새로운 방법 'paintComponent (com.sun.prism.Graphics)를 '제공과의 paintComponent (java.awt.Graphics)를 무시하지 않습니다 의미합니다. –

+3

@DavidGilbert * "새로운 메소드를 제공한다는 의미입니다."* 오버라이드 된 메소드에서 @ @ Override가 지정되어야하는 한 가지 이유. 화물 열차가 도착하기 전에 우리가 잘못된 경로에 있다는 컴파일러 경고를 얻는 것이 편리합니다 .. –

+0

그리고 그 말은 내가 그림을 가져와야한다는 것입니다, 그렇습니까? 가져온 그림을 삭제하면 다시 표시되지 않습니다. 그리고 "super.paintComponent (g)"의 기능은 무엇입니까? – EstellaGu