2013-06-12 3 views
0

이미지가 포함 된 JLabel로 JLayeredPane을 얻었습니다.Scaling JFrame content

JLayeredPane panel = new JLayeredPane(); 
JLabel label1 = new JLabel(); 
label1.setIcon(new ImageIcon(image)); 
label1.setBounds(0, 0, 1300, 900); 
panel.add(label1, 0); 
frame.add(panel); 
frame.setSize(1320,900); 
frame.setVisible(true); 

을 그리고의 JLayeredPane에서 일부 다른 이미지 : 이는 다음과 같습니다.

모두 잘 표시됩니다. 그러나 창에서 프레임의 크기를 조절할 때 이미지의 크기가 조절되지 않습니다. (이미지는 같은 크기를 유지하고 창은 greyspace가 커지면 커집니다.) 이제 내 질문 : 어떻게하면 크기를 조정해도 이미지가 항상 프레임을 채우고 있습니다.

+0

아마도'paintComponent()'를 오버라이드하고'Image.getScaledInstance()'를 호출해야 할 것입니다. –

+1

왜 JLayeredPane입니까? 내 대답보기 : http://stackoverflow.com/questions/9227270/possible-to-layer-imageicons/9227310#9227310, http://stackoverflow.com/questions/9137404/overlay-a-jbutton-over- jlabel-in-java-swing/9137561 # 9137561 – rtheunissen

답변

1

JLayeredPane을 왜 사용해야하는지 잘 모르겠습니다.

아마도 Darryl의 Stretch Icon 클래스를 사용할 수 있습니다.

0

당신이 정말로 필요한 모든 이미지와 JComponent의이며,이 같은의 paintComponent를 오버라이드 (override) : 다음

public class FillImage extends JComponent { 
    final Image image; 

    public FillImage(final Image image) { 
     this.image = image; 
    } 

    @Override 
    public paintComponent(Graphics g) { 
     // Additionally, you may set extra hints for better scaling 

     // Draw image stretched to fill entire component 
     g.drawImage(image, 0, 0, getWidth(), getHeight(), null); 
    } 
} 

FillImage 구성 요소는 모든 공간이 채워 만드는 레이아웃 컨테이너에 추가되어 있는지 확인 (예 : BorderLayout, CENTER).