I would suggest raycasting. My Java4k entry Frag4k seems very similar to your project. The advantage of raycasting is that you don’t need a Z buffer & thus ordinary Java2D will do the job. The disadvantage is that you need to push lots of individual pixels if you want to texture the walls. My solution was to use a BufferedImage and then use getRaster() on it (& some further calls) to get the underlying array of colour values. These can then be written to directly, which is quite fast. 
In raycasting, you draw rays in 2D (plan view), from the viewing position, through each vertical line of the screen in turn, calculating the intersections with all the maze walls. You need to keep track of the nearest intersection. Calculate the distance to that intersection (perpendicular to the screen). This needs you to do 2D matrix rotations with sin and cosine. Use similar triangles to work out the position on the screen of the top and bottom of the wall each ray intersected with. In the simplest implentation, draw a line in the sky colour from the top of the screen to the top of the wall; draw a second line in the wall colour from the top of the wall to the bottom of the wall. Lastly draw in the ground colour from the bottom of the wall to the bottom of the screen. Repeat for each ray.
I would post the code, but the competition has only just started, so want to hang on to it for the moment :-\
Alan