2011-12-29 1 views
1

1.4.2 JRE에 대한 호환성을 제공해야한다는 것을 알기 전까지는 최신 버전의 Java, Java 6을 사용하여 Eclipse에서 배정을 위해 전함 게임을 진행했습니다.JPanel의 하위 호환성 문제에 이미지 렌더링 - 내가 뭘 잘못하고 있니?

필자는 1.4.2 컴파일러에서 사용할 수없는 기능 및 라이브러리 클래스를 사용하지 않도록주의했으며 코드는 정상적으로 컴파일됩니다. 문제는 게임의 배경 이미지가 제대로 렌더링되지 않고 왼쪽 상단의 작은 모서리 만 렌더링된다는 것입니다.

는 참고로, 여기 내 문제를 보여주는 스크린 샷입니다 :

만 모서리가 1.4.2 JRE

에서 렌더링되는 자바 6 런타임 환경

Image Link (I can't embed them yet.)

에서 제대로 렌더링 게임

Image Link (I can't embed them yet.)

그리고 물론, 두 스크린 샷의 코드에서 다른 런타임 환경.

표시되는 JPanel에 배경이 그려지고 setContentPane()을 사용하여 JFrame에 추가됩니다. 이미지를 프로그램에로드 할 때 오류가 없습니다.

많은 테스트를했는데 입력 핸들러가 이미지가있는 작은 모퉁이의 입력에만 응답한다는 것을 알았습니다. 이는 내 JPanel이 전체 ​​화면을 채우지 못한다는 것을 의미합니다. 그 크기를 두 번 확인했는데 JFrame의 크기 (800 x 600)와 일치합니다. 이 방법은 게임의 프레임을 렌더링하기 위해 반복적으로 호출되는

public void render() {        

     Graphics2D g = (Graphics2D) getGraphics(); 
     Graphics2D gb = (Graphics2D) buffer.getGraphics(); 

     gb.drawImage(background, 0, 0, null); 

     gb.setColor(new Color(45, 45, 45)); 
     gb.setFont(new Font("Arial", Font.BOLD, 18)); 
     gb.drawString("Outwit the computer. Are you up for the challenge?", 175, 185); 

     cont.draw(gb, contState); 

     //Draw buffer to screen 
     g.drawImage(buffer, 0, 0, null); 

} 

:

그리고 여기 내 렌더링 코드입니다. 이것은 JPanel 클래스의 일부입니다.

나는 거의 모든 것을 시도했으며 이것이 나의 마지막 수단입니다. 이것은 아마도 이전 런타임 환경의 버그 일 수 있습니까? 어떤 통찰력이라도 대단히 감사하겠습니다!

미리 감사드립니다. 난 당신이 더러운 지역을보고 위치를 다시 칠하는 프로그램을 말하는 것이 아니라 그것이 무슨 일이 일어나고 있는지 알고 가정 할 필요가 있다고 생각 http://java.sun.com/products/jfc/tsc/articles/painting/#mgr

: :)

+2

당신이 그림을 어떻게하는지에 대한 완전한 컨텍스트 없이는 당신이 무엇을하고 있는지 말하기가 어렵습니다. 예를 들어 사용자 정의 페인팅은 메서드에 전달 된 Graphics 객체를 사용하여 JPanel의 paintComponent() 메서드에서 수행해야합니다. BufferedImage의 Graphics 객체를 얻은 다음 버퍼링 된 이미지에 페인트하지 않는 한 getGraphics() 메서드를 사용하여 Graphics 객체를 가져올 수 없습니다. 문제를 나타내는 [SSCCE] (http://www.sscce.org)를 게시해야합니다. 나는 JDK1.4.2를 사용하지 않지만 어쩌면 다른 그림의 문제점을 발견 할 수 있습니다. – camickr

+1

방금 ​​paintComponent()를 시도해 보았지만 아무런 차이가 없었습니다. 작은 모서리는 여전히 다시 페인트됩니다 ... 또한 getGraphics()에 대한 정보를 주셔서 감사 드리며, 암호. :) SSCCE 게시에 대한 작업을하겠습니다. – Geoff

+0

@Geoff : "시도해 봤어"하지만 그게 우리가 한 일이나 새로운 코드가 작동하지 않는 이유에 대해서는 아무것도 알려주지 않습니다. 두 번째 camickr 님의 추천 : 귀하가하고있는 일을보고 테스트 할 수 있도록 [sscce] (http://sscce.org)를 만들고 제공하십시오. –

답변

1

이 문서로보고있다.

관련 문제