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

1 resposta
K

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 Resposta

TerraSkilll

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.

Criado 15 de fevereiro de 2019
Ultima resposta 15 de fev. de 2019
Respostas 1
Participantes 2