2010-05-25 4 views
1

JDesktopPane 용으로 자체 제작 된 DesktopPaneUI를 사용하고 있습니다. 클래스에 적절한 메소드를 작성 했으므로 문제가 발생합니다. JDesktopPane의 크기를 조정할 때 배경 이미지의 크기가 프레임과 함께 조정되지 않습니다. 이미지가 창을 처음 열 때 크기로 잘린 것처럼 보입니다. 창보다 큰 이미지를 제공하고 있는데, 여전히이 문제가 있습니다.JDesktopPane의 배경 설정

내 메소드는 내 desktopUI 클래스의 생성자에서 호출됩니다.

super(); 
this.background = javax.imageio.ImageIO.read(new File(fileName)); 

나는 내가 UI, 또는 JDesktopPane에 크기가 변경 될 때 배경이 여전히 창을 채우고하도록 myDesktopPaneUI 클래스를 설정 내 주요 클래스를 변경할 수있는 방법이 있나요? 창의 크기로 이미지 크기를 조정하는 방법으로 drawImage()를 호출하는

setUI(new myDesktopPaneUI("media/bg.jpg")); 

답변

6

재정 paint()는 :

@Override 
public void paint(Graphics g, JComponent c) { 
    g.drawImage(image, 0, 0, c.getWidth(), c.getHeight(), null); 
} 
4

만 배경 이미지를 추가 할 사용자 정의 UI를 작성하는 경우, 쉽게 접근 방식에있다

첫째 일반적으로 당신이 super.paintComponent (g)를 호출 할
JDesktopPane desktop = new JDesktopPane() 
{ 
    protected void paintComponent(Graphics g) 
    { 
     g.drawImage(image, 0, 0, getWidth(), getHeight(), null); 
    } 

}; 

하지만 이후 : 그것은 모든 LAF의 작동하도록 JDesktopPane에의 사용자 정의 그림을 이미지가 전체 배경을 덮을 것이므로이를 수행 할 필요가 없습니다.

+2

를 사용하여 이미지 크기를 조정 한 다음 창 크기를 조절할 때 알고하는 구성 요소 리스너를 사용하여 - 그래서 호출하지 슈퍼 슈퍼의 계약 경우에만에 준수됩니다 불투명 == false. 이는 기본적으로 아니며 언제든지 클라이언트 코드로 변경할 수 있습니다. 그래서 정말 안전하지 않아서 당신의 IDE 타입을 하나의 추가 라인으로 바꾸는 것이 ...-) – kleopatra

+0

@kleopatra, 좋은 지적;) – camickr

+0

그런 다음 "if (image! = null) {drawImage;} else { super.paintComponent;} "나중에 이미지를 연결할 수있는 경우 paintComponent에 있습니까? 좋은 생각입니까? – Benj

1

모든 것을 포함하는 경우에도, 그것은 투명한 영역이 있습니다

image.getScaledInstance(getWidth(), getHeight(), 0);