2010-05-30 5 views
3

이것은 내 코드입니다. 실제로 내 관심사가 아닌 이미지를 찾습니다. 내 관심사는 이미지를 패널의 배경으로 만드는 방법입니다. 나는 그래픽으로 일하려고 노력하고있다. 그러나 나는 어떤 아이디어도 일하지 않는다? 부디??JPanel 배경 이미지

try { 
      java.net.URL imgURL = MAINWINDOW.class.getResource(imagen); 

      Image imgFondo = javax.imageio.ImageIO.read(imgURL); 
      if (imgFondo != null) { 
       Graphics grafica=null; 
       grafica.drawImage(imgFondo, 0, 0, this); 
       panel.paintComponents(grafica); 
      } else { 
      System.err.println("Couldn't find file: " + imagen); 
      } 

     } catch... 

답변

2

여기에 코드에 오류가 있습니다. 참조를 취소하기 전에 graficanull으로 설정하십시오. 이것은 확실히 NullPointerException을 던질 것입니다. 자신의 Graphics 객체를 선언하는 대신, 페인팅에 사용할 메소드에 전달 된 객체를 사용해야합니다. 스윙에서이 작업을 수행하려면, 당신은 당신의 이미지를 페인트하기 paintComponent 메소드를 구현해야한다, 이런 식으로 뭔가 :

당신이 긴하고있는에 디스크에서 이미지 파일 읽기와 같은 작업을 실행하지 않으려는
public void paintComponent(Graphics grafica) { 
    grafica.drawImage(imgFondo, 0, 0, this); 
    } 

주 그림 스레드입니다. 위의 예에서는 이미 imgFondo을로드하고 paintComponent 방법으로 액세스 할 수 있도록 저장했다고 가정합니다.

+0

감사합니다. 그렇다면이 방법을 재정의해야합니까? 아니면 그냥 내 수업에 그것을 구현? –

+0

구현하면 슈퍼 메서드를 재정의합니다. – akf

+0

'null); // 여기에 ImageObserver가 필요 없다'클래스가 어떻게 사용될 것인가? * 가정하지 마라. * –

0

이미지를 원래 크기로 그리려면 JLabel에 이미지를 추가 한 다음 레이아웃 관리자를 설정하여 레이블을 컨테이너로 사용하기 만하면됩니다.

사용자 정의 페인팅을 수행해야하는 유일한 경우는 배경 이미지의 크기를 조정하거나 바둑판 식으로 배열하거나 다른 멋진 그림을 그리는 것입니다.

두 접근법에 대한 자세한 내용은 Background Panel을 참조하십시오.

또한 Custom Painting의 스윙 튜토리얼 섹션을 확인하십시오.

+0

고마워! 링크는 매우 유용합니다. 또 다른 질문이 있습니다. 이미지를 레이블에 넣는 방법을 알고 있지만 레이블을 다른 모든 구성 요소 아래에 두려면 어떻게해야합니까? 내 응용 프로그램에서 동적 및 정적 구성 요소를 모두 만들고 있어요. –

+0

나는 그 질문을 이해하지 못한다. "배경 패널"링크에서이 작업을 수행하는 방법에 대한 예를 들었습니다. 레이블을 프레임의 내용 창으로 사용할 수 있도록 JPanel처럼 동작시키는 방법을 보여주는 4 줄의 코드를 제공했습니다. SSCCE 게시에 도움이 더 필요하면 http://sscce.org – camickr