나는 인생 시뮬레이션 게임을 만들기 위해 배경 이미지를 JFrame에 페인트하려고합니다. 이것은 내 코드입니다.생성시 JFrame을 페인트하는 방법은 무엇입니까?
public class MainFrame extends JFrame {
//creates image variables
Image background;
public MainFrame(int w, int h) {
//creates new JFrame and sets some other properties
super("Life Simulation");
setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(w,h));
//creates images
background = Toolkit.getDefaultToolkit().createImage("img/default.jpg");
this.repaint();
setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g.drawImage(background,0,0,null);
}
}
표시하기 전에 설정을 다시 채려고했지만 아무 것도 표시하지 않았습니다. 내 메인 메서드에서 내 프로그램을 시작할 때 JFrame 단순히 비어 있습니다. 그러나 가장 작은 크기로 조정하면 페인트 메서드가 호출되고 배경 이미지가 그려집니다.
이 내 주요 방법입니다 :
public class Main {
public static void main(String[] args) {
MainFrame frame = new MainFrame(1080,720);
frame.repaint(); //tried invoking paint() here as well but again to no avail
}
}
편집 : 나는 그것은 또한 사전에 페인트() 또는 그 변종 중 하나를 사용하여 내가 경험이 거의 가지고 언급 할 가치가있다 생각, 그것이 어떻게 구현되어야하는지와 그 능력에 대한 지식 만이 있어야한다.
시도 재정의'대신'paint'의 paintComponent'. 무슨 일이 일어나는지 알려줘. – csmckelvey
두 번째 대답을보십시오. 도움이되는지 확인하십시오. http://stackoverflow.com/questions/1097366/java-swing-revalidate-vs-repaint – imtheman
@Takendarkk는'paintComponent' 이러한 메소드를 오버라이드 (override) 할 때 내가 오류에 따라, JFrame' '에 대한 정의되지 않은 방법이다. 그리고 @imtheman, 어떤 구성 요소도 제거하지 않기 때문에 그 결과는 도움이되지 않습니다. – Overclocked