/** * File: GUI.java * Author: Brian Borowski * Date created: August 1, 2011 * Date last modified: April 13, 2012 */ import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; public class GUI extends JFrame { private static final int DEFAULT_WIDTH = 640, DEFAULT_HEIGHT = 480; private static final long serialVersionUID = 1L; private final ApplicationStarter applicationStarter; private final GamePanel gamePanel; public GUI(final ApplicationStarter appStarter) { super(Application.NAME); this.applicationStarter = appStarter; gamePanel = new GamePanel(DEFAULT_WIDTH, DEFAULT_HEIGHT); final Container contentPane = getContentPane(); contentPane.add(gamePanel, BorderLayout.CENTER); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); addWindowListener(new ClosingWindowListener(gamePanel)); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); setResizable(false); validate(); setLocationRelativeTo(null); setVisible(true); setFocusable(true); requestFocus(); gamePanel.requestFocusInWindow(); // Must request focus to receive key events. gamePanel.startGame(true); } private void doApplicationClosing() { if (applicationStarter != null) { gamePanel.stopGame(); AudioPlayer.stop(); applicationStarter.close(); } else { System.exit(0); } } class ClosingWindowListener implements WindowListener { private final GamePanel gamePanel; public ClosingWindowListener(final GamePanel gamePanel) { this.gamePanel = gamePanel; } public void windowClosing(final WindowEvent e) { gamePanel.stopGame(); doApplicationClosing(); } public void windowActivated(final WindowEvent e) { gamePanel.resumeGame(); } public void windowDeactivated(final WindowEvent e) { gamePanel.pauseGame(); } public void windowDeiconified(final WindowEvent e) { gamePanel.resumeGame(); } public void windowIconified(final WindowEvent e) { gamePanel.pauseGame(); } public void windowClosed(final WindowEvent e) { } public void windowOpened(final WindowEvent e) { } } }