2014-12-19 5 views
0

Я пытаюсь сделать JLabel автоматически изменением размера, когда размер JFrame изменяется. Я попытался сделать то, что сказали ответы на другие потоки, но все они по-прежнему выглядят одинаково. Всякий раз, когда я максимизирую окно, JLabel остается того же размера и остается в центре. Я использую GridBagLayout. Я также попытался использовать Thread для постоянного обновления размера JLabel, но это не сработало. JLabel содержит ImageIcon, и я думаю, что размер изображения может привести к тому, что JLabel не будет изменять размер. Любые идеи?Изменить размер JLabel для соответствия JFrame

EDIT: Вот мой текущий код:

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, - это горячая ссылка на изображения, видимые в [этом Q & A] (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 
Смежные вопросы