2013-12-23 4 views
-1

두 개의 클래스가 있습니다. 클래스 GUI는 JFrame을 확장하고 JPanel을 확장하는 Surface 클래스 인 JPanel을 화면에 표시합니다.Java에서 화면에 이미지를 표시하려고하면 작동하지 않습니다.

클래스 표면에는 이미지를 표시해야하는 paintComponent 메서드가 있지만 어떤 이유로 그것을 표시하지 않습니다. 여기에 코드입니다 :

import javax.swing.*; 

public class GUI extends JFrame { 

    GUI(){ 
     initUI(); 
    } 

    public void initUI(){ 
     Surface s = new Surface(); 
     add(s); 
     pack(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

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

} 

import java.awt.*; 
import javax.swing.*; 

public class Surface extends JPanel { 

    Image image; 
    ImageIcon ii; 

    public void paintComponent(Graphics g) { 

     super.paintComponent(g); 

     Graphics2D g2d = (Graphics2D) g; 

     ii = new ImageIcon("redsquare.png"); 
     image = ii.getImage(); 

     Dimension d = new Dimension(); 
     d.width = image.getWidth(null); 
     d.height = image.getHeight(null); 
     this.setPreferredSize(d); 

     g2d.drawImage(image,50,50,null); 

    } 

} 
+0

위치한 다양한 이미지 소스를 실행 해보십시오 보이는 이미지의 위치에 문제가 될 수 있습니까? 프로젝트 루트 폴더에 넣으십시오. –

+2

paintComponent (ii = new ImageIcon ("redsquare.png");) 내부에 이미지를로드하지 마십시오.이 객체의 로컬 변수를 만듭니다. – mKorbel

+1

제쳐두고, 이미지를 'JLabel'에 50px로 표시하면됩니다 'EmptyBorder'. –

답변

2

는 파일 위치에 문제가 보인다, 프로젝트의 자원에서 PNG 얻기를 위해 다음 코드를 시도 :

ii = new ImageIcon(getClass().getResource("redsquare.png")); 

Surface 클래스와 같은 패키지에 그 예를 redsquare.png 파일.

1

당신이 듣고, 는 "redsquare.png", 당신은 이미지가 프로젝트 루트 또한

ProjectRoot 
     redsquare.png 
     src 
     bin 

에서 직접 할 필요가이 상대 경로를 사용하여 이클립스 또는 넷빈 같은 IDE를 사용하는 경우 ";,이 오브젝트의 지역 변수를 만들고"() - @ mKorbel

@mKorbel

의 지혜로운 말은 redsquare.png의 paintComponent II = 새 이미지 아이콘() "안에 이미지를로드 결코"

또한 임베디드 리소스의 경우 @ alex2410의 대답을 고려해야합니다. 클래스의 이미지를로드하려고합니다.

0

는 어디 PNG 파일이

+0

나는 보통 "대답이 아니지만 좋은 코멘트를 줄 수있다"라고 말하고 싶습니다. OTOH는이 스레드에서 이전에 언급되었으며, 단지 잡음입니다. –