creating a gui and handling game windows

Hello,
i am working at he moment at a 2d turn basted space strategy game. I need to interact with the windows i draw to the screen but i am not quiet happy how i do it so i would like to get some info how to do it properly.
How it works for me now:
I have an input class which is processing the mouse input.
My game class is pulling the needed mouse information from my input class, and for a mouse click it calls a mouseClicked function in my galaxy class witch handles the logic of the galaxy.
The galaxy class is going through a list with all possible windows if some exist. If one is found where the mouse click happened the click routine of the window is called and the window does what it does with the click.

Overall i have the feeling that i am overdoing something and that there would be a better way to work with my in game windows than that what i am doing now.

Any tips or links that could lead me to a better understanding of this case would be nice.

Are you using LWJGL or Java2D?

If you’re using LWJGL you might rather look into solutions like TWL or NiftyGUI.

If you’re using Java2D you could just use Swing/AWT for GUI.

If you’re using a homebrew library with your own widgets, your code might look something like this:

    public static Widget getDeepestWidgetAt(Widget parent, int x, int y) {
    	if (!parent.inside(x,  y))
    		return null;
    	
        for (int i=parent.childCount()-1; i>=0; i--) {
            Widget comp = parent.getChild(i);
            
            if (comp!=null && comp.isShowing()) {
                if (comp.inside(x, y)) {                    
                    return getDeepestWidgetAt(comp, x, y);
                }
            }
        }
    	return parent;
    }

For mouse wheel, click, move, etc. you simply determine the deepest component underneath the mouse and then send the event to that component. For keyboard input, etc. you have to implement a focus system.

For the learning effect i am writing everything for myself. So it seems that i am not totally on the wrong way in doing the input handling which is good. Then i can can devote more time in this system to make it better. I would hate it to work weeks on this system and then release it was an to complicated way of doing things.