OK, i hope you don't try to market your game with the current obvious copyright issues.
Aside from that if I understand your problem your hero sprite has a background of every combination of background. In response I will say all you need to do is render top to bottom of your view port and make sure the hero has a transparent background.
As for the UI you could also draw it onto the map in a separate layer above the map making it able to be slightly transparent and any other effects.
EDIT
Since your player is a single cell in size it would be easy to render your grid like you are doing then simply render the player afterwards with a transparent background to ensure that what the play is standing on is seen.
A more advanced way is to render in layers in such a way that your player can walk behind backs of buildings and trees.
To do this you will need to multiple passes of rendering for example one way could be
- Render the ground information, in your current map you have grass and water etc.
- Render the tiles that cant be passed through sprites such as bottom part of buildings and bottoms of trees and your bushes.
- Render the player on top of all that.
- Render the tops of buildings and tree, this will allow a player to be rendered behind the tops of objects.
- Finally render your UI layer with buttons etc (these will be drawn and the click handled by you not java).
The advantage to doing 1 and 2 separately comes into play when you want different ground textures for example, rocky grass, desert. by having transparency on all objects backgrounds it will allow the background through for example your bushes could be rendered on desert or grass with no extra images.
Remember tho to render all of this to an off screen image and then display the image after completions as it will ensure your frame rate don't drop to the increase in rendering.
If iI haven't understood your question please clarify and i will update my answer.