Yes, you can just add listeners to the JPanel (you don't need a JButton) and it should work fine. Anyhow, generally, your code looks it should work, but maybe there is another panel overlapping that's why mouse clicks aren't registering?
Currently I have it so that each Screen is it's own object and there is one listener to deal with everything. I was thinking though that maybe I should have one listener in each Screen class that is specifically programmed to handle that one screen's reactions.
I would suggest add one listener to each JPanel/JComponent you want to receive mouse events from. Very hard to maintain if you try to squeeze everything into 1 listener.
I learned in University about Model View Control architecture, and we always had listener classes as separate classes.
If you consider listeners in the "Control" part that's correct. In my opinion listeners are part of the "View" but not the "Control". The listener calls the "Control" element, e.g. your
((BattleScreen)mCurrentScreen).NextTurn().
Academically speaking, considering the listener a control element is probably correct. I generally found the following works a lot easier for me:
- Model (model of your world): your game elements, e.g. World, Bullet, Entities, Player
- Control (to update the model): your game update loop, your screens, loading/saving games etc.
- View (inputs+outputs): GUI, OpenGL, Listeners, Mouse, Joystick, Sound