2009-10-10 4 views
0

Image 상단에 JPanel을 추가하는 중에 문제가 있습니다.이미지 및 패널

Image bgImage = loadImage(filename); 
JPanel jp = new JPanel(); 

jp.setBounds(100,100,100,100); 
jp.setOpaque(true); 
jp.setBackgroudColor(Color.red); 

bgImage.add(jp); 

이 일 후에 내가 단지 bgImage 참조 : 이것은 내가 할 노력하고있어 것입니다. 나는 모든 것을 시도했지만 여전히 패널을 보여줄 수는 없습니다. 누군가 나를 도울 수 있습니까?

+0

'setBackgroundcolor'에는 오타가 있습니다. – Svante

+0

어쨌든'setBackgroundColor'라는 이름의 메소드는'JPanel'에 없습니다. – SingleShot

답변

4

Image 안에 구성 요소를 배치 할 수 없습니다. 당신이하고자하는 것은 Image을 스윙 구성 요소 (예 : JPanel)의 배경 위에 페인트하는 것입니다. 모든 스윙 구성 요소에는 paint() 메서드가 있습니다 (이 순서는 아님). paintComponent(), paintChildren(), paintBorder() 따라서 paintComponent() 메서드를 재정의하여 배경 이미지를 패널 위에 페인트하고 싶습니다.

class BackgroundImagePanel extends JPanel { 

    public void setBackgroundImage(Image backgroundImage) { 
     this.backgroundImage = backgroundImage; 
    } 

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

    private Image backgroundImage; 
} 

BackgroundImagePanel panel = new BackgroundImagePanel(); 
panel.setBackgroundImage(image); 
panel.add(new JTextField("Enter text here...")); 
panel.add(new JButton("Press Me")); 
+0

음, 내 코드가 그런 쓰레기라면 죄송합니다. 나는 작동하는 더 긴 코드를 가지고있다 (위에있는 것은 아니다). 그러나 나는 정말로 이미지 위에 패널을 배치해야합니다. 그 이유는 스윙 구성 요소를 배치 할 것이기 때문입니다. 간단히 말해, 이미지를 배경으로, 보이지 않는 패널을 맨 위에, 구성 요소를 마지막으로 스윙하고 싶습니다. : | – annaoj

+0

알겠습니다. 좀 더 설명하기 위해 내 대답을 편집했습니다. – SingleShot

0

는 "BackgroundImagePanel"솔루션은 물감이 실행하면, 사용자 정의 방법은 배경 이미지의 맨 위에 모든 "아이"구성 요소를 칠 것이다,라는 것, 다음 paintChildren() 메서드가 호출됩니다 실제 크기의 이미지. 이것이 요구 사항이라면, 사용자 정의 컴포넌트를 생성하는 대신 JLabel을 사용할 수 있습니다.

BackgroundPanel 항목은 어떻게 수행 할 수 있는지 보여줍니다. 또한 사용자 정의 이미지 페인팅 솔루션이 포함 된 배경 패널을 제공하여 이미지의 크기를 조정하고 타일링 할 수 있습니다 (요구 사항의 일부인 경우).