Redimensionar frame

pessoal estou fazendo um codigo onde quando eu clico nos botões o layout do JPanel muda de tamanho. O codigo vai abaixo:

// demonstrando gridLayout
import java.awt.GridLayout;
import java.awt.Container;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JButton;

public class GridLayoutFrame extends JFrame implements ActionListener
{
	private JButton buttons[]; // array de botões
	private final String names[] = {"one", "two", "tree", "four", "five", "six"};
	private boolean toggle = true; // alterna entre dois layouts
	private Container container; // container do frame
	private GridLayout gridLayout1; // primeiro gridLayout. O gridLayout dispõe os compoentes 
	// na forma de tabela
	private GridLayout gridLayout2; // segundo gridLayout
	
	// construtor sem argumento
	public GridLayoutFrame()
	{
		super("GridLayout Demo");
		gridLayout1 = new GridLayout(2, 3, 5, 5); // 2 por 3; lacunas de 5
		gridLayout2 = new GridLayout(3, 2); // 3 por 2; nenhuma lacuna
		container = getContentPane(); // obtém painel de conteúdo
		setLayout(gridLayout1); // configura o layout JFrame
		buttons = new JButton[names.length]; // cria array de JButtons
		
		for(int count = 0; count < names.length; count++)
		{
			buttons[count] = new JButton(names[count]);
			buttons[count].addActionListener(this); // registra o ouvinte
			add(buttons[count]); // adiciona os botões
		}
	}	
	
	// trata eventos de botão alternando entre layouts
	public void actionPerformed(ActionEvent event)
	{
		if (toggle)
		{
			container.setLayout(gridLayout2);
			super.getContentPane().setSize(900, 200); // muda o tamanho do panel
		}
		else
		{
			container.setLayout(gridLayout1);
			super.getContentPane().setSize(300, 200); 
		}
		
		toggle = !toggle; // alterna para valor oposto
		container.validate(); // refaz o layout do container
	}

}

o problema é que o frame não acompanha o tamanho dos componentes depois eu mudar o tamanho de JPanel. Alguém sabe como eu posso fazer com que o frame junto com os componentes seja coerentes em tamanho?? se alguém souber, manda o codigo que vai ser util pra mim…

sk2ck,

Tem um material no site www.t2ti.com, curso Java Starter, que pode lhe ajudar. Lá existe uma apostila em pdf apenas de SWING.
O material é gratuito e tem vídeo-aulas também.

Abraços,

O miguelJava, esse site que me passou tem um material bem fraquinho hein… a API com certeza é mais interessante que esse site. Achei-o bem didatico, mas pouco profundo. Além disso não me ajudou na minha duvida aqui postada… Contudo obrigado!!!

skc2k,

Na verdade este material é voltado para programadores que estão iniciando na Linguagem, o que, aparentemente, não é o seu caso, por isso o zelo que tivemos com a didática colocando muitos exemplos práticos e exercícios.
Mas estamos pensando em fazer um material com conteúdo um pouco mais aprofundado para programadores mais experientes como você.
Em relação ao seu problema, se compreendi bem, basta você corrigir o método actionPerformed(ActionEvent event), substituindo as linhas:

...
super.getContentPane().setSize(900, 200); // muda o tamanho do panel  
...
super.getContentPane().setSize(300, 200); 
...

por

...
this.setSize(900,200);
...
this.setSize(300, 200); 
...

Espero ter ajudado desta vez :slight_smile:
Abraços,

migueljava, obrigado pela resposta… realmente funcionou direitinho como eu desejava. Em relação ao seu material, creio estar fazendo um trabalho importante. Quero parabenizar-te pelo trabalho que além de excelente pra iniciantes em java, é gratuito e tem uma ótima didatica. Uma sugestão que lhe dou, é fazer uma manual ou tutorial das duvidas mais frequentes de JAVA para programadores que querem iniciar nessa linguagem. Você pode inclusive utilizar a busca do GUJ para desenvolver esse material, e disponibilizar no seu site. Com certeza seu tutorial seria muito bem vindo e evitaria muitas perguntas no forum… inclusive a minha né… hehehehe. Mas é só uma sugestão!!!

Usar o setSize não é, nem de longe, a melhor abordagem. Fixar tamanhos de maneira direta não é multi-plataforma.

Se você está usando Swing puro, procure se informar sobre como funciona o GridBagLayout.
Nele, você define políticas de como os componentes devem se redimensionar, onde eles devem ser ancorados e se eles devem se esticar ou não.