Problemas com componentes swing

Bom, meu codigo esta funfando:

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.

Alguem sabe oque pode ser? :?

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.

1 curtida

não é isso nao.

A janela aparece certinho mais sem nenhum componente(label,textfield,button), se eu minimizar e restaurar ela ae tds componentes aparecem

:shock:

[quote=Renan4000]não é isso nao.

A janela aparece certinho mais sem nenhum componente(label,textfield,button), se eu minimizar e restaurar ela ae tds componentes aparecem

:shock: [/quote]

Tentou fazer isso amigo? Aconteceu a mesma coisa?

Abraços

frame.setVisible(true);

tentei sim, da na mesma, como eu ja disse o frame aparece sem os componentes. Quando eu minimizo e restauro a tela eles aparecem! :frowning:

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);
}

Ok, Wellington! Na pr√≥xima vez utilizarei o bot√£o ‚ÄúCode‚ÄĚ. Obrigado pela informa√ß√£o!

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:

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Container.html#add(java.awt.Component,%20java.lang.Object,%20int)

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.

era só colocar

frameLogin.setVisible(true);

na ultima linha do construtor mesmo, valeu ViniGodoy!!

Eii pessoal…alguém tem algum código-fonte completo de uma Locadora de veículos…ou a parte de swing??
Se puderem me ajudar…Agradeço! :smiley:

Tente:

pack(); loginFrame.setVisible(true);
Ao final do 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).