2014-06-12 5 views
0

저는 GUI 작성에 익숙하지 않아서 이클립스 용 윈도우 빌더를 사용하기로 마음 먹었습니다. 나는 검색을 해왔지만 내 "메뉴"에 배경 이미지를 추가하는 좋은 방법을 찾지 못했습니다.jPanel에 대한 배경 이미지가 작동하지 않습니다.

public Menu() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setBounds(50, 50, 300, 250); //Dimensiones 

contentPane = new JPanel() { //Imagen de Fondo 

    public void paintComponent(Graphics g) { 
      Image img = Toolkit.getDefaultToolkit().getImage( 
      Menu.class.getResource("/imgs/rotom.jpg")); 
      g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this); 
     } 
}; 

그리고 다음과 같은 클래스를 추가 : 예를 들어 나는이 시도

import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.Toolkit; 

그러나 아무 소용이 윈도우가 지금까지 내 코드는 단지 하나의 표준 WindowsBuilder 요리사, 그 흐린 회색으로 남아

당신을 위해 4 개의 버튼을 더했습니다. 그러나 나는 그들이 여기에서 중요하다고 생각하지 않습니다. 내가 추가 한 코드가 jPanel의 paintComponent() 메소드를 오버라이드해서 이미지를 그려야하지 않습니까?

메뉴의 클래스가 내 프로젝트의 패키지에 있고 이미지가 imgs 패키지 내에 있으며 같은 프로젝트 내에 있습니다.

미리 감사드립니다. 당신은 배경 이미지의 크기를 조정하거나 효과를 적용에 관심이 있다면

+1

페인트 메서드에서 리소스를로드하려고 시도하지 마십시오. 그들을 클래스 속성으로로드하고 단순히 페인트로 그리십시오. –

+0

@AndrewThompson 미안하지만 나는 이것에 대해 아주 새로운 것입니다. 당신이 나에게 모범을 보여줄 수 있다고 생각합니까? –

+0

이미지를로드하는 데는'ImageIO.read (URL)'을 사용하는 것이 좋습니다. 왜냐하면 더 많은 피드백시 오류가 발생하기 때문입니다. –

답변

4

간단한 방법은,에, (스케일링 이상)이 방법에 JLabel ...

BufferedImage bg = ImageIO.read(Menu.class.getResource("/imgs/rotom.jpg")); 
JLabel label = new JLabel(new ImageIcon(bg)); 
setContentPane(label); 
setLayout(...); 

이 있습니다 한계를 사용하는 것입니다 라벨의 선호 크기는 항상 이미지의 크기가 될 것이고 그 내용을 고려하지 않을 것입니다. 이것은 좋고 나쁘다.

사용 것 같다 다른 방법은, 당신은 paintComponent 될 수 있으므로 완료하는 데 시간이 걸릴 수 paintComponent 방법에서 모든 작업을 수행하려고하지 말아야 전문 구성 요소를

public class BackgroundPane extends JPanel { 

    private BufferedImage img; 

    public BackgroundPane(BufferedImage img) { 
     this.img = img; 
    } 

    @Override 
    public Dimension getPreferredSize() { 
     return img == null ? super.getPreferredSize() : new Dimension(img.getWidth(), img.getHeight()); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(img, 0, 0, this); 
    } 
} 

을 사용하는 것입니다 자기, 몇 가지 아이디어를 들어, 한 번 봐 걸릴 수 있습니다 그것의에 전체 질문 ...

구성 요소 크기를 조정할 때 확장 할 수있는 이미지를 얻기 .... 종종 보통 연속으로 불리는

아, 그리고, 당신은 최고 수준의 컨테이너에서 직접 확장 JFrame처럼, 그들은 당신의 구성 요소의 재사용을 줄이고로 당신을 고정하지 않도록해야합니다 단일 컨테이너

+0

고마워요! 생성 된 코드는 Windows 빌더가 제공하는 엉망진창이며,이 예제를 사용하여이 코드를 작동 시키려고합니다. –

+0

@CodeGrasshopper 나는이 문제 중 일부를 명확하게하는 데 도움이되기를 바랍니다. – MadProgrammer

+0

그 것이고 앞으로 남긴 참고 문헌은 앞으로 많은 도움이 될 것입니다. 다시 한번 감사드립니다. –

관련 문제