Como aparecer um JText e um JButton

2 respostas
Zeross

Pessoal me ajudem o que eu fiz de errado aqui ?

package teste1;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Teste1 {

    public static void main(String[] args) {
        
        JFrame janela = new JFrame();
        janela.setTitle("Menu");
        janela.setSize(300,200);
        janela.setVisible(true);
        
        JLabel Menu = new JLabel();
        Menu.setText("MENU");
        Menu.setSize(30, 10);
        Menu.setAlignmentX(150);
        Menu.setAlignmentY(15);
        Menu.setVisible(true);
        
        JButton cadastro = new JButton();
        cadastro.setText("Cadastro");
        cadastro.setSize(15, 30);
        cadastro.setVisible(true);
        
        
    }
}

2 Respostas

E

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;
    }
}
  1. Você nunca, nunca, nunca cria um objeto da classe JFrame diretamente. Você cria uma classe derivada de JFrame.
  2. 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”.
  3. Para componentes aparecerem no JFrame é necessário adicioná-los ao ContentPane - veja as linhas
getContentPane().add(getLblMenu());
        getContentPane().add(getBtnCadastro());
  1. 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.
E

Além disso, raramente você precisa usar setVisible em componentes - o único caso em que tive de usar setVisible é para mostrar JFrames e JDialogs. Você provavelmente deve ter usado o tal do setVisible como “programação orientada a mágica” - você tenta tudo até dar certo. Nesse caso, só produziu “fumaça mágica” - não funcionou do jeito que você queria.

Mesmo para esconder um botão você normalmente não o esconde e sim o desabilita (setEnabled(false)).

Criado 31 de julho de 2013
Ultima resposta 31 de jul. de 2013
Respostas 2
Participantes 2