java – updateUI desaparece los botones de mi JPanel

Verán, estoy haciendo un laberinto, y tengo una clase que extiende de JPanel, y tambien uso graphics, tengo 2 problemas, el primero es que de los dos botones solo de muestra uno, hasta que le paso el mouse por encima, el segundo es que cuando se actualiza mi laberinto ambos botones desaparecen y no aparecen hasta que le paso el mouse por encima, aquí la clase:

public final class Grafica extends JPanel {

MatrizLab rellenar=new MatrizLab();

JButton btnGenerar = new JButton();
JButton btnBuscar = new JButton();

public Grafica() {                   
   
    this.setLayout(null); 
    this.setBackground(Color.WHITE);     
    this.setBounds(0, 0, 800, 600);  
    DibujarBotones();      
}



@Override
public void paint(Graphics g) {  
       update(g);      
}

@Override
public void update(Graphics g) {              
    Graphics2D g2 = (Graphics2D) g;
    Image imagen = createImage(800, 600);       
    Graphics2D fondo = (Graphics2D) imagen.getGraphics();       
    Dibujar(fondo);     
    g2.drawImage(imagen, 0, 0, this);    
     
}

public void Dibujar(Graphics g) {           
    Graphics2D g2 = (Graphics2D) g; 
    int x = 140;
    int y = 50;
    for (int i = 0; i < 20; i++) {
        for (int j = 0; j < 20; j++) {
            String camino = Integer.toString(j);           
            g2.drawRect(x, y, 26, 26);
            g2.drawString(camino, x + 8, y + 15);
            if (rellenar.getMatriz()(i)(j) == 0) {
                g2.setColor(Color.BLACK);
                g2.fill3DRect(x, y, 26, 26, true);
                g2.setColor(Color.BLACK);
            }
            x = x + 26;
        }
        x = 140;
        y = y + 26;
    }
   
}   

    public void DibujarBotones(){
       
    btnGenerar.setBounds(30, 50, 90, 25);
    btnGenerar.setFont(new Font("Times New Roman", 1, 12));
    btnGenerar.setText("Generar!");
    btnGenerar.setFocusPainted(false);
    this.add(btnGenerar);
    
    ActionListener accion = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {               
            rellenar.RellenaMatriz();
            System.out.println("holi");        
          updateUI();
    
        }
      
    };
    
    btnGenerar.addActionListener(accion);
    
    btnBuscar.setBounds(30, 90, 90, 25);
    btnBuscar.setFont(new Font("Times New Roman", 1, 12));
    btnBuscar.setText("Buscar!");
    btnBuscar.setFocusPainted(false); 
    this.add(btnBuscar); 

    ActionListener accion2 = new ActionListener(){
     @Override
     public void actionPerformed(ActionEvent ae) {             
     for(int i=0;i<20;i++){
      for(int j=0;j<20;j++){
          System.out.print(rellenar.getMatriz()(i)(j));
       }
        System.out.println();
      }

    }
 };
 btnBuscar.addActionListener(accion2);
}

}