MigLayout - componentes esticando para fora da janela [RESOLVIDO]

8 respostas
erico_kl

Olá pessoal…

Acredito que muitos já devem ter passado por isso com o MigLayout, o problema é o seguinte: tenho um JComboBox com a propriedade “growx” em um painel que utilizo em vários JFrames e em cada um deles o tamanho é diferente… só que quando o texto inserido no JComboBox nao cabe completamente dentro dele, este estica para fora do painel (ao invés de cortar o texto do campo, quando o tamanho é fixo)… nao tem alguma forma de fazer o combo crescer porém sem estourar os limites do painel?

Obrigado desde já…

8 Respostas

Nicolas_Fernandes

Oi, erico, beleza?
Posta o seu código pra eu dar uma analisada?

Abraços,
fique com Deus! :smiley:

erico_kl

opa..
na verdade é uma simples inserção de um combo no painel..

public class PanelTeste extends JPanel {

	public PanelTeste() {
		initGUI();
	}
	
	private void initGUI() {
		this.setLayout(new MigLayout("", "[][grow]",  "[]"));
		
		JComboBox teste = new JComboBox(
				new String[] {"Teste 1", "Teste 2 esticando para fora do painel", "Teste 3"});
		this.add(new JLabel("Combo:"));
		this.add(teste, "growx");
	}
	
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.add(new PanelTeste());
		frame.setSize(250, 70);
		frame.setVisible(true);
	}
}
Nicolas_Fernandes
erico_kl:
opa.. na verdade é uma simples inserção de um combo no painel..
public class PanelTeste extends JPanel {

	public PanelTeste() {
		initGUI();
	}
	
	private void initGUI() {
		this.setLayout(new MigLayout("", "[][grow]",  "[]"));
		
		JComboBox teste = new JComboBox(
				new String[] {"Teste 1", "Teste 2 esticando para fora do painel", "Teste 3"});
		this.add(new JLabel("Combo:"));
		this.add(teste, "growx");
	}
	
	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.add(new PanelTeste());
		frame.setSize(250, 70);
		frame.setVisible(true);
	}
}
Cara, Ao invés de setar o tamanho fixo do painel:
frame.setSize(250, 70);
Porque você não usa o método pack()? Ele redimensiona o painel de acordo com o arranjo dos componentes. A sua JComboBox vai ficar do tamanho do maior texto que ela contém e o painel vai ter o tamanho desejado.
frame.pack();
Faz o teste aí e nos dê o reply.

Espero ter ajudado,
fique com Deus! :D

erico_kl

o problema é que eu tenho esse painel em vários frames diferentes, e em cada frame o painel tem uma largura diferente.. e esse é o problema..

e mesmo usando o pack, só serviria na abertura do frame, mas se em tempo de execução eu adicionar no combo um ítem com descrição maior, o problema vai ser o mesmo.. e eu preciso que o combo, mesmo recebendo dados dinamicamente, sempre fique do mesmo tamanho inicial..

um exemplo simples do que eu quero dizer (mesmo usando pack):
public class PanelTeste extends JPanel {  
	
	private JComboBox teste;
	
    public PanelTeste() throws InterruptedException {  
        initGUI();  
        
        JFrame frame = new JFrame();  
        frame.add(this);  
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
        
        Thread.sleep(5000);
        
        teste.addItem("Teste 4 esticando para fora do painel. Teste realizado às "+new Date());
    }  
      
    private void initGUI() {  
        this.setLayout(new MigLayout("", "[][grow]",  "[]"));  
          
        teste = new JComboBox(  
                new String[] {"Teste 1", "Teste 2 esticando para fora do painel", "Teste 3"});  
        this.add(new JLabel("Combo:"));  
        this.add(teste, "growx");  
    }  
      
    public static void main(String[] args) throws InterruptedException {  
        new PanelTeste();
    }  
}
F

Já tentou tirar o grow das constraints principais do layout, ali onde tu instancia o MigLayout?
Eu nunca tive essa situação, mas acho que resolve.

Se não der, tente setar o tamanho pelo layout ali no this.add(teste, “growx”)

erico_kl

fasts:
Já tentou tirar o grow das constraints principais do layout, ali onde tu instancia o MigLayout?
Eu nunca tive essa situação, mas acho que resolve.

mas aí o combo não vai crescer até o limite do painel (pois a coluna não vai crescer), e mesmo tirando não resolve…

não entendi o que vc quis dizer, vc quer fixar um tamanho?

F

Tu não pode fixar o tamanho, então, né?

Tenta fazer com spanx, growx.

erico_kl

fasts:
Tu não pode fixar o tamanho, então, né?

Tenta fazer com spanx, growx.


cara, realmente resolveu com spanx… antes eu só havia usado o span pra mesclar células, mas neste caso resolveu o problema… o combo estica somente até o limite do painel, que era o que eu precisava…

valeu!

Criado 2 de maio de 2012
Ultima resposta 3 de mai. de 2012
Respostas 8
Participantes 3