Estou trabalhando em um pequeno jogo. No código a seguir eu não consegui adicionar minhas JLabel's à minha JFrame. Poderiam me ajudar a colocar à minha janela as JLabel's? Já tentei de todas as formas que eu conheço

package oriented_byobjects;

import java.awt.;
import java.awt.event.
;
import javax.swing.;
import static javax.swing.JOptionPane.
;

public class Oriented_byObjects extends JFrame implements ActionListener {

Font grande = new Font("Serif",Font.BOLD,50);

 //variaveis de Jogo
   int Energia = 10;
   int Fome = 0;
   int $ = 0;
   
   
JLabel showE;
JLabel showF;
JLabel show$;

//instanciamento dos JButtons
JButton b = new JButton("Correr");
JButton b3 = new JButton("Dormir");
JButton c = new JButton("Comer");
JButton t = new JButton("Trabalhar");

JButton b2 = new JButton("Sair");


  
   
   
   //actions dos JButtons
@Override
public void actionPerformed(ActionEvent e){
    
    //Correr Settings
   if(e.getSource() == b){
   JOptionPane.showMessageDialog(null, "Você correu!");
   Energia--;
   Fome++;
       System.out.println("Energia: "+Energia+"/10");
       System.out.println("Fome: "+Fome+"/10");
       if(Energia==0){
           JOptionPane.showMessageDialog(null, "Sua energia acabou");
       System.exit(0);
       }
   }
   //Sair Settings
   if(e.getSource() == b2){
       JOptionPane.showMessageDialog(null, "Tchau");
   System.exit(0);
   
   }
   //Dormir Settings
   if(e.getSource() == b3){
       JOptionPane.showMessageDialog(null, "Você dorme bem!");
       Energia = 10;
       System.out.println("Energia: "+Energia+"/10");
 
   
   }
   //Comer Settings
   if(e.getSource() == c){
       if($ < 1){
           JOptionPane.showMessageDialog(null, "Não pode comprar comida"
                   + " sem dinheiro");
       
       }else{JOptionPane.showMessageDialog(null, "Você comeu um pão quentinho");
       Fome--;
       $--;
       System.out.println("Dinheiro: "+$);
       if(Fome < 0){
       Fome++;
           System.out.println("Fome: "+Fome+"/10");
       }else{System.out.println("Fome: "+Fome+"/10");
       }}
       
       if(Fome > 10){
           JOptionPane.showMessageDialog(null, "Você morreu de fome");
           System.exit(0);
       }
       
       }
   //Trabalhar Settings
   if(e.getSource() == t){
           $++;
           System.out.println("Dinheiro: "+$);
           Energia--;
           System.out.println("Energia: "+Energia+"/10");
           if(Energia < 1){
               JOptionPane.showMessageDialog(null, "Você morreu de sono!");
               System.exit(0);
               
           }
           
       }
   }

//Método construtor

public Oriented_byObjects(){

this.setLayout(

new BoxLayout(this, BoxLayout.Y_AXIS));

   //adicionando actionListener
   b.addActionListener(this);
    b2.addActionListener(this);
    b3.addActionListener(this);
    c.addActionListener(this);
    t.addActionListener(this);
    //setBounds de cada JButton
    
    b.setBounds(5, 5, 100, 30);
    
    b2.setBounds(5, 500, 150, 30);
    
    b3.setBounds(5, 40, 100, 30);
    
    c.setBounds(5, 80, 100, 30);
    
    t.setBounds(5, 120, 100, 30);
    //instanciando uma JFrame j
    
    JFrame j = new JFrame();
    
   
    j.setLayout(null);
    
    //Configs da janela
    j.setSize(800, 600);
    j.setVisible(true);
    j.setTitle("Joguinho da vida");
    //adicionar os JButtons
    j.add(b);
    j.add(b2);
    j.add(b3);
    j.add(c);
    j.add(t);
    
    //adicionar as legendas e configs das mesmas
    showE = new JLabel("Teste");showE.setLocation(45, 5);
    j.add(showE);
    show$ = new JLabel("Teste");showE.setLocation(45, 40);
    j.add(show$);
    showF = new JLabel("Teste");showF.setLocation(45, 80);

}
//método principal: main
public static void main(String[] args) {

    //Rodar os codigos anteriores
    new Oriented_byObjects();

}

}

Pequeno erro aqui:

 j.setLayout(null);

//Configs da janela
j.setSize(800, 600);
j.setVisible(true);
j.setTitle("Joguinho da vida");

//adicionar os JButtons
j.add(b);
j.add(b2);
j.add(b3);
j.add(c);
j.add(t);

Você está exibindo a janela antes de adicionar as labels nela. Para isso funcionar você deveria usar o frame.repaint(). Mas no seu caso não é preciso, apenas adicione as labels antes de exibir a janela.

Edit: Caso não seja isso, verifique se as labels estão com os bounds corretos (como você fez com os botões). Layout null é facilmente “bugavél”.

1 curtida

Os botões estão funcionando bem, o verdadeiro problema são as JLabel’s.
Mas vou tentar mudar isso

Acabou que não mudou nada:

    showE = new JLabel("Teste");showE.setLocation(45, 5);
    j.add(showE);
    show$ = new JLabel("Teste");showE.setLocation(45, 40);
    j.add(show$);
    showF = new JLabel("Teste");showF.setLocation(45, 80);
    //adicionar os JButtons
    j.add(b);
    j.add(b2);
    j.add(b3);
    j.add(c);
    j.add(t);
    //Configs da janela
    j.setSize(800, 600);
    j.setVisible(true);
    j.setTitle("Joguinho da vida");

Seria:
JLabel lblNome = new JLabel("Nome");

Eu fiz dos dois jeitos, desse e do que eu mostrei.
ambos deram na mesma. :neutral_face:

image
Para mim isto está errado

Vou fazer do jeito que você disse (apesar de já ter tentado)

Edit: Não deu em nada :

JLabel showE = new JLabel();
JLabel showF = new JLabel();
JLabel show$ = new JLabel();

Você setou o setBounds() dos JLabel ?

Não, vou tentar

kkkkkkk

Não deu certo também:

showE.setBounds(400, 200, 100, 30);
show$.setBounds(400, 400, 100, 30);
showF.setBounds(300, 200, 100, 30);

@Viniciusog não, ele cria as instâncias mais embaixo; nesta parte:

//adicionar as legendas e configs das mesmas
showE = new JLabel("Teste");showE.setLocation(45, 5);
j.add(showE);
show$ = new JLabel("Teste");showE.setLocation(45, 40);
j.add(show$);
showF = new JLabel("Teste");showF.setLocation(45, 80);

Algo que não entendi foi porque está usando dois frames:

public class Oriented_byObjects extends JFrame implements ActionListener {}

e

JFrame j = new JFrame();

então é como Jakecoll disse no final, coloca o setVisible por ultimo

@Jakecoll Pior…Não vi esta parte

Um exemplo Pedro

import java.awt.Dimension;

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

public class JLabelTEste extends JFrame {
	
	private JLabel lblNome = new JLabel("Teste");
	
	public JLabelTEste() {
		setSize(new Dimension(300, 200));
		setTitle("Testando");
        setLayout(null);
		
		lblNome.setBounds(30, 30, 100, 20);
		this.add(lblNome);
		
	}	
	
	public static void main(String[] args) {
		JLabelTEste jt = new JLabelTEste();
		jt.setVisible(true);		
	}
}

image

1 curtida

Vou tentar tudo :slight_smile:

Não consegui, tentei de todas as formas ditas por vocês. Vou tentar colocar o que eu quero em algo separado, e coloco no projeto. Se não der certo pesquiso mais.7

Bom, aqui vai então. Substitua seu construtor por isto:

//Método construtor
public Oriented_byObjects() {
    this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

    //adicionando actionListener
    b.addActionListener(this);
    b2.addActionListener(this);
    b3.addActionListener(this);
    c.addActionListener(this);
    t.addActionListener(this);

    //setBounds de cada JButton
    b.setBounds(5, 5, 100, 30);
    b2.setBounds(5, 500, 150, 30);
    b3.setBounds(5, 40, 100, 30);
    c.setBounds(5, 80, 100, 30);
    t.setBounds(5, 120, 100, 30);

    //instanciando uma JFrame j
    JFrame j = new JFrame();
    j.setLayout(null);

    //adicionar os JButtons
    j.add(b);
    j.add(b2);
    j.add(b3);
    j.add(c);
    j.add(t);

    //adicionar as legendas e configs das mesmas
    showE = new JLabel("Teste");
    showE.setBounds(150, 0, 100, 25);

    show$ = new JLabel("Teste");
    show$.setBounds(150, 25, 100, 25);

    showF = new JLabel("Teste");
    showF.setBounds(150, 50, 100, 25);

    j.add(showE);
    j.add(show$);
    j.add(showF);
    
    //Configs da janela
    j.setSize(800, 600);
    j.setVisible(true);
    j.setTitle("Joguinho da vida");
}

O problema é o bound mesmo. Quando se usa layout nulo é necessário adicioná-lo.

Eu recomendaria a ti que não usasse layout nulo. Dê uma olhada em MigLayout, BorderLayout e outros.

Referências:
Layout Managers
MigLayout

Muito Obrigado!!! Finalmente consegui! :smile: