2013-12-15 3 views
1

나는 디지털 포켓몬 카드와 같은 게임을하고있다. 내 이미지를 페인트하려고하면 JFrame이 비어 있습니다. 그것은 단순한 오류 일지 모르지만 해결책을 찾을 수 없었습니다. 스택 오버플로에서 자신의 솔루션이 제 코드에서 작동하지 않지만 저는 많은 문제를 보았습니다. JFrame를위한 클래스 :JPanel이 페인팅하지 않음, JFrame이 공백으로 남음

import javax.swing.JFrame; 


public class Rocks extends JFrame{ 

public Rocks(){ 
    setVisible(true); 
    setTitle("Rocks Card Game"); 
    setSize(1200,297); 
    add(new Display()); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
} 
public static void main(String[] args) { 
    new Rocks(); 
} 

} 

인 JPanel 클래스 : 록스 생성자의 바닥에

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Image; 

import javax.swing.ImageIcon; 
import javax.swing.JPanel; 


public class Display extends JPanel{ 
    Image granite; 
    public Display(){ 
     granite = new ImageIcon("C:\\Users\\Raj\\Pictures\\Granite.png").getImage(); 
     setBackground(Color.black); 
    } 
    public void paint(Graphics g){ 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.drawImage(granite,0,0,null); 
    } 
} 
+2

. 아이콘이있는 JLabel 만 사용하면됩니다. – camickr

+0

다행 이군. :) –

답변

2

방금하지, 그것을이없는 경우 JFrame을 확장 할 이유가 있나요. 상속에 비해 선호되는 구성입니다. @camickr commnent에서 사용자 지정 그림이 필요하지 않으므로 JLabel을 사용하고 setIcon으로 전화하면됩니다.

public class Rocks{ 

private JFrame frame; 

public Rocks(){ 
    frame = new JFrame(); 
    frame.setTitle("Rocks Card Game"); 
    frame.setSize(1200,297); 
    //frame.add(new Display()); 
    //as camickr comment 
    JLabel label = new JLabel(new ImageIcon("C:\\Users\\Raj\\Pictures\\Granite.png")); 
    frame.add(label); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.pack(); // size components 
    frame.setVisible(true); // make it visible 
} 
public static void main(String[] args) { 
    new Rocks(); 
} 

} 

그리고 당신이 그 스윙 프로그램의 paintComponent을 (오버라이드 (override) 할 필요가있는 경우 대신 그래서 페인트()

를 재정의) 볼 수있는 다른 것은 당신의 패널을 변경 (당신은 여전히 ​​패널을 사용하려는 경우) 이

public class Display extends JPanel{ 
    Image granite; 
    public Display(){ 
     granite = new ImageIcon("C:\\Users\\Raj\\Pictures\\Granite.png").getImage(); 
     setBackground(Color.black); 
    } 
    @Override // always add override annotation 
    public void paintComponent(Graphics g){ 
     super.paintComponent(g); // always call super first 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.drawImage(granite,0,0,this); 
    } 
} 

같은 클래스는 더 읽기 : 사용자 정의 그림에 대한 필요가 없습니다 Painting in AWT and Swing components

+1

* "상속을 통한 구성"* 나머지도 좋았지 만 첫 번째 단락에서 나를 받았다. :) –

+0

좋아요, 알겠습니다. 고맙습니다. – lilmessi42

+1

@AndrewThompson : D, matisse와 같은 GUI 편집기를 사용하는 경우 D, 사용하지 않는 좋은 이유입니다. – nachokk

관련 문제