2014-12-19 92 views
0

我想讓JLabel在JFrame調整大小時自動調整大小。我曾嘗試做過其他主題上的答案,但所有這些答案仍然顯示相同。每當我最大化窗口,JLabel保持相同的大小,並保持在中心。我正在使用GridBagLayout。我也嘗試使用線程來不斷更新JLabel的大小,但它沒有奏效。 JLabel擁有一個ImageIcon,我認爲圖像的大小可能會導致JLabel無法調整大小。 任何想法?調整JLabel以適合JFrame

編輯:這裏是我當前的代碼:

setLayout(new GridBagLayout()); 

GridBagConstraints gc=new GridBagConstraints(); 
gc.fill=GridBagConstraints.HORIZONTAL; 
gc.gridx=0; 
gc.gridy=0; 

background=new JLabel(new ImageIcon(getClass().getResource("ingame.gif"))); 
add(background, gc); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
background.addMouseMotionListener(this); 

而且JFrame的是這樣的:

http://i.stack.imgur.com/i8iJm.png

當後臺的JLabel是爲了填補整個JFrame中。

+2

*任何想法*是,請分享你嘗試過什麼,甚至更好的包括[MCVE(HTTP:// WWW。 stackoverflow.com/help/mcve)展示您的問題。 – dic19

+1

根據@ dic19建議的示例獲取圖像的一種方法是熱點鏈接到[本問答](http://stackoverflow.com/q/19209650/418556)中顯示的圖像。 –

+0

1.GridBagLayout在這種情況下不起作用。使用BorderLayout。 2.如果您希望調整圖像的大小..那麼您必須使用面板而不是標籤。 –

回答

0

你應該重寫你的標籤的paintComponent方法,試試這個代碼:

import java.awt.Graphics; 
import java.awt.Image; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class Test extends JFrame 
{ 
    Image image; 
    JLabel label; 

    public static void main(String[] args) 
    { 
     try 
     { 
      new Test(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

    public Test() throws IOException 
    { 
     setBounds(100, 100, 500, 400); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     image = ImageIO.read(getClass().getResource("/images/image.gif")); 
     label = new JLabel() 
     { 
      public void paintComponent(Graphics g) 
      { 
       super.paintComponent(g); 
       g.drawImage(image, 0, 0, getWidth(), getHeight(), 0, 0, image.getWidth(null), image.getHeight(null), null); 
      } 
     }; 

     add(label); 
     setVisible(true); 
    } 
} 
0

你爲什麼不嘗試MigLayout。它具有填充整個面板的相當簡單的實現。使用MigLayout您的代碼會是這個樣子,也解決您的問題:?

setLayout(new MigLayout("fill")); 
background=new JLabel(new ImageIcon(getClass().getResource("ingame.gif"))); 
add(background, "cell 0 0"); 
//Rest of your code