Bem pessoal, minha duvida nem é referente ao codigo mas sim o porque acontece o que acontece rsrs
nao funciona corretamente:
importjavax.swing.JFrame;importjavax.swing.JLabel;importjava.awt.FlowLayout;importjavax.swing.JTextField;importjavax.swing.JButton;classTesteFrameextendsJFrame{privateJLabellabel;privateJTextFieldtf;privateJButtonbotao;publicTesteFrame(){super("Titulo");setLayout(newFlowLayout());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(500,300);setVisible(true);label=newJLabel("Texto do label");add(label);tf=newJTextField(20);add(tf);botao=newJButton("Clique aqui");add(botao);}}
importjavax.swing.JFrame;importjavax.swing.JLabel;importjava.awt.FlowLayout;importjavax.swing.JTextField;importjavax.swing.JButton;classTesteFrameextendsJFrame{privateJLabellabel;privateJTextFieldtf;privateJButtonbotao;publicTesteFrame(){super("Titulo");setLayout(newFlowLayout());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);label=newJLabel("Texto do label");add(label);tf=newJTextField(20);add(tf);botao=newJButton("Clique aqui");add(botao);}}
Porque no primeiro caso o botao, textfield e label so aparecem depois que eu redimensionar manualmente o tamanho da janela e no segundo caso funciona certinho.
Quando eu escrevo:
setSize(500,300);
Nao é o mesmo que criar um objeto da classe e setar o tamanho?
Bem pessoal, minha duvida nem é referente ao codigo mas sim o porque acontece o que acontece rsrs
nao funciona corretamente:
importjavax.swing.JFrame;importjavax.swing.JLabel;importjava.awt.FlowLayout;importjavax.swing.JTextField;importjavax.swing.JButton;classTesteFrameextendsJFrame{privateJLabellabel;privateJTextFieldtf;privateJButtonbotao;publicTesteFrame(){super("Titulo");setLayout(newFlowLayout());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(500,300);setVisible(true);label=newJLabel("Texto do label");add(label);tf=newJTextField(20);add(tf);botao=newJButton("Clique aqui");add(botao);}}
importjavax.swing.JFrame;importjavax.swing.JLabel;importjava.awt.FlowLayout;importjavax.swing.JTextField;importjavax.swing.JButton;classTesteFrameextendsJFrame{privateJLabellabel;privateJTextFieldtf;privateJButtonbotao;publicTesteFrame(){super("Titulo");setLayout(newFlowLayout());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setVisible(true);label=newJLabel("Texto do label");add(label);tf=newJTextField(20);add(tf);botao=newJButton("Clique aqui");add(botao);}}
Porque no primeiro caso o botao, textfield e label so aparecem depois que eu redimensionar manualmente o tamanho da janela e no segundo caso funciona certinho.
Quando eu escrevo:
setSize(500,300);
Nao é o mesmo que criar um objeto da classe e setar o tamanho?
Abraços
Gustavo:
Acho que assim fica melhor...^^
gqferreira
Aqui funcionou perfeito das duas maneiras... Você está usando qual sistema operacional?
Uma dica.... não sei se pode ser o problema... Dê o setVisible no objeto, prefiro fazer assim....
packageremessa;importjavax.swing.JFrame;importjavax.swing.JLabel;importjava.awt.FlowLayout;importjavax.swing.JTextField;importjavax.swing.JButton;classTesteFrameextendsJFrame{privateJLabellabel;privateJTextFieldtf;privateJButtonbotao;publicTesteFrame(){super("Titulo");setLayout(newFlowLayout());setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(500,300);label=newJLabel("Texto do label");add(label);tf=newJTextField(20);add(tf);botao=newJButton("Clique aqui");add(botao);}}
Cara, creio que nao seja do sistema operacional e sim da versao do jdk se for este o caso.
Uso windows xp
Sobre o codigo no topico, desculpe. Fiz mo confusao aqui.
Sobre dar o setVisible, nem testei isso. Mas no segundo caso ja funcionou corretamente. Eu apenas queria ver se alguem sabe se esse erro é na minha maquina mesmo ou o motivo que esta causando o erro…
Abraços
R
roger_rf
Tecno-Java: Na primeira listagem de código que você mostrou, você exibe o formulário (setVisible(true)) e em seguida adiciona alguns componentes. Esses componentes só serão exibidos quando o formulário tiver de ser redesenhado - por exemplo, após um redimensionamento do formulário.
Na segunda listagem tudo funciona bem porque, após a chamada do construtor, você chama setSize() no método main(), o que força o redimensionamento e portanto o redesenho do formulário.
As regras práticas para casos como esse são: só chame setVisible(true) depois de que tiver seu formulário completamente montado; NÃO faça com que um formulário exiba a si mesmo dentro do próprio construtor dele; e, se tiver que adicionar componentes a um formulário em tempo de execução, chame repaint() após a adição para que o formulário seja redesenhado adequadamente.
Note: If a component has been added to a container that has been displayed, validate must be called on that container to display the new component. If multiple components are being added, you can improve efficiency by calling validate only once, after all the components have been added.
Traduzindo:
“Se um componente foi adicionado a um container que já foi exibido, o método validate() deve ser chamado nesse container para que o novo componente seja exibido. Caso multiplos componentes tenham sido adicionados, você pode melhorar a eficiência chamando validate apenas uma vez, depois que todos os componentes tenham sido adicionados.”