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…
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.
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!!!
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);
...
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.