Nenhum componente pode ser criado e depois deixado “solto”, como você fez.
Eu aconselharia, no seu caso, você instalar o plugin WindowBuilder em um Eclipse, criar exatamente um JFrame com um JLabel e um JButton, e ver o código que ele gerou. Vou fazer isso para você, para você ter uma ideia melhor.
Veja que ele gera um código meio “tortuoso”, mas vai ver que é na verdade mais organizado, à medida que você for se acostumando.
package guj;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
public class Exemplo1Botao1Texto extends JFrame {
private JLabel lblMenu;
private JButton btnCadastro;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Exemplo1Botao1Texto frame = new Exemplo1Botao1Texto();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Exemplo1Botao1Texto() {
initComponents();
}
private void initComponents() {
setTitle("Menu");
setBounds(100, 100, 300, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
getContentPane().add(getLblMenu());
getContentPane().add(getBtnCadastro());
}
private JLabel getLblMenu() {
if (lblMenu == null) {
lblMenu = new JLabel("MENU");
lblMenu.setBounds(6, 6, 55, 16);
}
return lblMenu;
}
private JButton getBtnCadastro() {
if (btnCadastro == null) {
btnCadastro = new JButton("Cadastro");
btnCadastro.setBounds(73, 6, 85, 28);
}
return btnCadastro;
}
}
- Você nunca, nunca, nunca cria um objeto da classe JFrame diretamente. Você cria uma classe derivada de JFrame.
- Para deixar seu código mais organizado, o Eclipse cria um método para cada componente (JLabel e JButton). É que a inicialização de cada componente pode ser muito complicada (várias linhas), então isso ajuda a deixar o código menos parecido com uma “linguiça”.
- Para componentes aparecerem no JFrame é necessário adicioná-los ao ContentPane - veja as linhas
getContentPane().add(getLblMenu());
getContentPane().add(getBtnCadastro());
- O construtor da classe derivada de JFrame não deve chamar setVisible: só quem instancia essa classe (que no caso chamei de Exemplo1Botao1Texto) é que deve chamar setVisible.