package ioexample; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; /** * Egyszeru memoriajatek felfordithato kartyakkal. A jatek lenyege a szinparok * egymas utan felforditasa. * * @author kisuf * */ public class GameApp implements ActionListener { //========================================================================= //members /** A GridLayoutExample foablaka. */ private final JFrame frame = new JFrame(); /** A menupontok. */ private JMenu setGameMenu = new JMenu( "Select game" ); private JMenuItem newGameMenuItem = new JMenuItem( "New game" ); private JMenuItem setGameSizeMenuItem = new JMenuItem( "Game settings" ); /** A jatek implementacioja */ private IGame[] games = new IGame[2]; private int actGameIdx = 0; //========================================================================= //constructors public GameApp(){ games[0] = new MemoryGameImpl(); games[1] = new SudokuImpl(); frame.setJMenuBar( createMenu() ); frame.setPreferredSize( new Dimension( 400, 400 ) ); frame.setTitle( "Games - " + games[actGameIdx].getGameName() ); frame.setResizable( false ); } //========================================================================= //implemented interfaces public void actionPerformed( ActionEvent e ) { String command = e.getActionCommand(); if( command.equals( "new game" ) ){ frame.getContentPane().removeAll(); frame.getContentPane().add( games[actGameIdx].getGamePanel() ); frame.getContentPane().validate(); } if( command.equals( "game settings" ) ){ JDialog dialog = games[actGameIdx].getSettingsDialog(); dialog.setModal( true ); //amig a dialogus aktiv a foablak le van //tiltva dialog.setVisible( true ); } if( command.startsWith( "game_" ) ){ try{ actGameIdx = Integer.valueOf( command.substring( command.length() - 1 ) ); frame.setTitle( "Games - " + games[actGameIdx].getGameName() ); frame.getContentPane().removeAll(); frame.getContentPane().validate(); frame.getContentPane().repaint(); }catch( Exception ex ){ //a kivetel lenyelheto, nem a jatekvalaszto menupontot nyomtak //meg } } } //========================================================================= //public functions public JFrame getFrame(){ return frame; } /** * Az alkalmazas main fuggvenye. * * @param args a parancssori parameterek (nincs szerepuk) */ public static void main( String[] args ){ SwingUtilities.invokeLater(new Runnable() { @Override public void run() { //allitsuk be a program kinezetet a rendszer altal megszabott //kinezetre try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() ); } catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } createAndShowGUI(); } }); } //========================================================================= //private & protected functions /** * A szokasos createAndShowGUI()... */ protected static void createAndShowGUI() { GameApp game = new GameApp(); JFrame frame = game.getFrame(); frame.pack(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setVisible(true); } /** * Elkesziti a menut. * * @return Az elkeszitett menu. */ private JMenuBar createMenu() { JMenuBar menuBar = new JMenuBar(); JMenu edit = new JMenu("File"); edit.setMnemonic('f'); for( int i = 0; i < games.length; ++i ){ JMenuItem gameMI = new JMenuItem( games[i].getGameName() ); gameMI.setActionCommand( "game_" + i ); gameMI.addActionListener( this ); setGameMenu.add( gameMI ); } newGameMenuItem.setActionCommand( "new game" ); newGameMenuItem.setMnemonic( KeyEvent.VK_N ); newGameMenuItem.setAccelerator( KeyStroke.getKeyStroke("ctrl N") ); newGameMenuItem.addActionListener( this ); setGameSizeMenuItem.setActionCommand( "game settings" ); setGameSizeMenuItem.setMnemonic( KeyEvent.VK_S ); setGameSizeMenuItem.setAccelerator( KeyStroke.getKeyStroke("ctrl S") ); setGameSizeMenuItem.addActionListener( this ); edit.add( setGameMenu ); edit.add( newGameMenuItem ); edit.add( setGameSizeMenuItem ); menuBar.add(edit); return menuBar; } }