2013-06-12 94 views
0

我得到了一個帶有JLabel的JLayeredPane,其中包含一個Image。 這看起來是這樣的:縮放JFrame內容

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的功能於Java的鞦韆/ 9137561#9137561 – rtheunissen

回答

1

不知道你爲什麼使用JLayeredPane。

也許你可以使用Darryl的Stretch Icon類。

0

您真正需要的是Jcomponent與圖像,並重寫paintComponent這樣的:

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組件添加到一個容器的佈局,使得它填補所有可用空間(如BorderLayoutCENTER)。