package com.itgorillaz.lnk2pwn.view.core; import java.awt.AWTEvent; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Insets; import java.awt.Toolkit; import java.awt.Window; import java.awt.event.AWTEventListener; import java.awt.event.WindowEvent; import javax.swing.JFrame; import org.springframework.stereotype.Component; @Component public class DefaultWindowController implements WindowController, AWTEventListener { private Window window; private JFrame root; @Override public void show(JFrame frame, BoundsPolicy policy) { Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.WINDOW_EVENT_MASK); this.root = frame; this.initBounds(frame, policy); frame.setVisible(true); } @Override public Window getActiveWindow() { return window; } @Override public JFrame getRootFrame() { return root; } @Override public void eventDispatched(AWTEvent event) { if (event instanceof WindowEvent) { WindowEvent windowEvent = (WindowEvent) event; switch(windowEvent.getID()) { case WindowEvent.WINDOW_ACTIVATED: window = windowEvent.getWindow(); break; case WindowEvent.WINDOW_DEACTIVATED: window = null; break; default: break; } } } private void initBounds(JFrame frame, BoundsPolicy policy) { if (!EventQueue.isDispatchThread()) { throw new IllegalStateException("WindowController.show() should be called " + "from the Event Dispatch Thread."); } switch(policy) { case CENTER_ONLY: frame.setLocationRelativeTo(null); break; case MAXIMIZE_BOTH: frame.setState(JFrame.MAXIMIZED_BOTH); break; case PACK_ONLY: frame.pack(); break; case PACK_AND_CENTER: frame.pack(); frame.setLocationRelativeTo(null); break; case MAXIMIZE: Toolkit toolkit = Toolkit.getDefaultToolkit(); Dimension dimension = toolkit.getScreenSize(); Insets insets = toolkit.getScreenInsets(frame.getGraphicsConfiguration()); int width = dimension.width - (insets.left + insets.top); int height = dimension.height - (insets.top + insets.bottom); int x = insets.left; int y = insets.right; frame.pack(); frame.setSize(width, height); frame.setLocation(x, y); break; case RESTORE_LAST_STATE: break; default: break; } } }