[RESOLVIDO] Problemas com o método "public void paint(Graphics g)"

Opa, tudo bem? Quem puder me ajudar, eu estou com um probleminha no meu projeto que, sempre quando eu crio um método paint, os meus JButtons e JLabel deixam de aparecer(na verdade, apenas o btnPlay aparece e o lblWelcome simplesmente não aparece) e o resto só aparece quando passa o mouse em cima. Quando eu tiro o método paint() ele funciona normalmente. Como resolver? O código está abaixo:

package game;

import java.awt.Color;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

 public class GameMainMenu extends JPanel {
   JButton btnPlay, btnHelp, btnCredits, btnNormal, btnHard;
   JLabel lblWelcome;

   public GameMainMenu(){
      setLayout(null);
      setBackground(Color.DARK_GRAY);
      initComponents();
   }

//  @Override
//    public void paint(Graphics g){}
//        
//        
//        pinta a borda branca do banner do game.
//        g.setColor(Color.white);
//        g.drawRect(24, 10, 851, 55);
//        
//        
//        pinta o banner do game.
//        new ImageIcon("C:\\Program Files\\Lucas's Games\\FirstGame\\snaketitle.jpg").paintIcon(this, g, 25, 11);
//        
//        
//       pinta a borda branca para o ambiente de jogo.
//        g.setColor(Color.white);
//        g.drawRect(22, 91, 853, 531);
//        
//        
//        pinta o ambiente de jogo.
//        g.setColor(Color.black);
//        g.fillRect(23, 92, 852, 530);
//        
//        
//        
//        
//        g.dispose();
//    }

private void initComponents(){
    btnPlay = new JButton("Jogar");
    lblWelcome = new JLabel("Bem-vindo ao Snake Game.");
    btnHelp = new JButton("Ajuda");
    btnCredits = new JButton("Créditos");
    lblWelcome.setBounds(236, 110, 450, 30);
    lblWelcome.setFont(new Font("Verdana", 20, 30));
    lblWelcome.setForeground(Color.CYAN);
    btnPlay.setBounds(200, 150, 100, 50);
    btnHelp.setBounds(400, 150, 100, 50);
    btnCredits.setBounds(600, 150, 100, 50);
    
    add(btnPlay);
    add(btnHelp);
    add(btnCredits);
    add(lblWelcome);
  }    
}
1 curtida

Acho que faltou, no seu método paint, chamar super.paint(), que faz o JPanel repintar os componentes nele adicionados:

@Override
public void paint(Graphics g){
  super.paint(g);
  // resto do seu código
}

De toda forma, é mais adequado, ao estender um JPanel para desenhar algo, estender o método paintComponent ao invés do paint, pois o paint faz mais coisas que desenhar e sobrescrevê-lo pode causar alguns problemas indesejados (mais do que haveria usando o paintComponent).

O funcionamento é bastante similar:

@Override
public void paintComponent(Graphics g) {
  super.paintComponent(g);

      // resto do seu código
}

Abraço.

3 curtidas