import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class MainScreen extends JFrame{
JPanel panel;
JFrame loginFrame;
JLabel lblTitle02, lblUser, lblPassword;
JButton btEntrar;
JTextField tfUser;
JPasswordField tfPassword;;
MainScreen(){
loginFrame = new JFrame();
panel = new JPanel();
Font titulo01 = new Font("Serif",Font.BOLD, 20);
loginFrame.setTitle("LOCADORA DE VEICULOS");
loginFrame.setLocation(300, 300);
loginFrame.setVisible(true);
loginFrame.setSize(430, 370);
loginFrame.getContentPane().add(panel);
panel.setLayout(null);
lblTitle02 = new JLabel("LOGIN");
lblTitle02.setVisible(true);
lblTitle02.setFont(titulo01);
lblTitle02.setBounds(20, 135, 280, 80);
lblUser = new JLabel("Usuario: ");
lblUser.setBounds(20, 215, 200, 35);
lblPassword = new JLabel("Senha: ");
lblPassword.setBounds(20, 245, 200, 35);
tfUser = new JTextField(10);
tfUser.setBounds(75, 220, 100, 20);
tfPassword = new JPasswordField(10);
tfPassword.setBounds(75, 255, 100, 20);
btEntrar = new JButton("Entrar");
btEntrar.setBounds(75, 290, 70, 20);
btEntrar.setToolTipText("Clique aqui para entrar!");
btEntrar.addActionListener(new ActionListener() {
panel.add(lblUser);
panel.add(lblPassword);
panel.add(tfUser);
panel.add(tfPassword);
panel.add(btEntrar);
}
}
Bom eu to no eclipse e coloco a aplicacao para rodar, as vezes ela sobe, com todos os componentes na tela, mais tem vezes que só carrega a janela sem nenhum componente. Se eu minimizar e restaurar a janela os componente aparecem.
Muda esse linha loginFrame.setVisible(true); para última instrução do construtor, ou seja, primeiro você define os componetes na tela e por último seta a visibilidade da janela. Tive um problema assim há muito tempo e resolvi dessa maneira.
Eu executei o seu código e consegui reproduzir o problema. Depois de algumas alterações, creio que consegui resolver o problema. Dentre alguns fatores que podiam causá-lo, como o setVisible() que o pessoal comentou anteriormente, também havia o fato de o frame não ter recebido um layout. O código alterado está a seguir:
public class MainScreen extends JFrame {
JPanel panel;
JFrame loginFrame;
JLabel lblTitle02, lblUser, lblPassword;
JButton btEntrar;
JTextField tfUser;
JPasswordField tfPassword;;
MainScreen() {
Font titulo01 = new Font("Serif", Font.BOLD, 20);
lblTitle02 = new JLabel("LOGIN");
lblTitle02.setFont(titulo01);
lblTitle02.setBounds(20, 135, 280, 80);
lblUser = new JLabel("Usuario: ");
lblUser.setBounds(20, 215, 200, 35);
lblPassword = new JLabel("Senha: ");
lblPassword.setBounds(20, 245, 200, 35);
tfUser = new JTextField(10);
tfUser.setBounds(75, 220, 100, 20);
tfPassword = new JPasswordField(10);
tfPassword.setBounds(75, 255, 100, 20);
btEntrar = new JButton("Entrar");
btEntrar.setBounds(75, 290, 70, 20);
btEntrar.setToolTipText("Clique aqui para entrar!");
panel = new JPanel();
panel.setLayout(null);
panel.setPreferredSize(new Dimension(430, 370));
panel.add(lblUser);
panel.add(lblPassword);
panel.add(tfUser);
panel.add(tfPassword);
panel.add(btEntrar);
loginFrame = new JFrame();
loginFrame.setLayout(new GridLayout());
loginFrame.setTitle("LOCADORA DE VEICULOS");
loginFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
loginFrame.add(panel);
loginFrame.pack();
loginFrame.setLocationRelativeTo(null);
loginFrame.setVisible(true);
}
O loginFrame.setVisible(true) deve ser a última linha do seu construtor.
Sempre que um frame ou JPanel (ou qualquer container) estiver visível, você é obrigado a chamar validate() para que um novo componente adicionado apareça. Note que isso está escrito na própria documentação do método add:
Por isso, deixe sempre para deixar o seu frame visível no último momento possível.
Uma dica. Facilita muito o desenvolvimento de aplicações Swing se o seu comando setVisible() não estiver no construtor de suas janelas. Sempre que possível, deixe o setVisible fora de lá e deixe a classe que dá new na janela chama-lo explicitamente.
Posso contar nos dedos quantas vezes um repaint foi necessário. Quase nunca é. Se você está tendo que usar esse comando, tem coisa errada no seu código.
Olá nossoamigo, ao postar códigos, use a tag CODE (vide botão acima do editor da mensagem).
O fato de não possuir um layout não é o causador do problema citado.
Renan4000, editei meu post anterior testando seu código. Não consegui mais replicar o problema.
Coloque, sempre q possível, os setVisibles em ordem do mais interno para o mais externo e, em caso de alterações, usar revalidate (quando o objeto GUI for do tipo JComponent). As vezes, o repaint pode ser necessário.
Posso contar nos dedos quantas vezes um repaint foi necessário. Quase nunca é. Se você está tendo que usar esse comando, tem coisa errada no seu código.[/quote]
Em geral não é necessário mesmo.
Infelizmente estou num projeto que já estava lotado de repaints antecedidos pelos revalidates :?: …
E o tamanho dele impede uma revisão dessa situação (pelo menos por agora).