MarshallAsch/solitaire

View on GitHub
solitare/Application.java

Summary

Maintainability
B
5 hrs
Test Coverage
/* main frame for the game contains the panel that does everything
 * 
 */

import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;

public class Application extends JFrame
{
     public JMenuItem user;
     
     //make a new game
     public Application() 
     {
          init(new Board());
     }
     
     //make a new game with the same deck
     public Application(ArrayList<Card> deck)
     {
          init(new Board(deck));
     }
     
     //initiate the frame
     private void init(Board board)
     {
          add(board);
          
          //create menu
          JMenuBar  menuBar = new JMenuBar();
          JMenu menu = new JMenu("Menu"), newGame = new JMenu("New Game"), login = new JMenu("Login");
          JMenuItem i1, i2, i3, i4, i5, i6, login1, login2;
          
          //create menu objects
          i1 = new JMenuItem("Random Deck");
          i2 = new JMenuItem("Same Deck");
          i3 = new JMenuItem("Close");
          i4 = new JMenuItem("Options");
          i5 = new JMenuItem("About");
          i6 = new JMenuItem("High Score");
          user = new JMenuItem();
          
          login1 = new JMenuItem("Login");
          login2 = new JMenuItem("Logout");
          login.add(login1);
          login.add(login2);
          
          //add to menu bar
          newGame.add(i1);
          newGame.add(i2);
          menu.add(newGame);
          menu.add(i3);
          menu.add(i4);
          menu.add(i5);
          menu.add(i6);
          
          //add listeners to the menu items
          i1.addActionListener(new ActionListener() {
               public void actionPerformed (ActionEvent actionEvent){  //new game 
                    Run.newApplication();     
                    dispose();
               }});
          i2.addActionListener(new ActionListener() {
               public void actionPerformed (ActionEvent actionEvent){   //new game with same deck
                    Run.newApplication(board.deck);
                    dispose();
               }});
          i3.addActionListener(new ActionListener() {
               public void actionPerformed (ActionEvent actionEvent){      //close
                    System.exit(0);
               }});
          i4.addActionListener(new ActionListener() {
               public void actionPerformed (ActionEvent actionEvent){  //open settings frame
                    if (canOppen())
                    {
                         setEnabled(false);
                         SettingsFrame ex = new SettingsFrame(board);
                         ex.setVisible(true);
                    }
               }});
          i5.addActionListener(new ActionListener() {
               public void actionPerformed (ActionEvent actionEvent){  //open about frame
                    if (canOppen())
                    {
                         setEnabled(false);
                         AboutFrame ex = new AboutFrame(board);
                         ex.setVisible(true);
                    }
               }});
          i6.addActionListener(new ActionListener() {
               public void actionPerformed (ActionEvent actionEvent){   //open high score
                    if (canOppen())
                    {
                         setEnabled(false);
                         HighScoreFrame ex = new HighScoreFrame(board);
                         ex.setVisible(true);
                    }
               }});
          login1.addActionListener(new ActionListener() {
               public void actionPerformed (ActionEvent actionEvent){      //open login
                    if (canOppen())
                    {
                         setEnabled(false);
                         Login ex = new Login(board);
                         ex.setVisible(true);
                    }
               }});
          login2.addActionListener(new ActionListener() {
               public void actionPerformed (ActionEvent actionEvent){       //logout
                    user.setLabel("not logged in");
                    Run.x = -1;
               }});
          menuBar.add(menu);
          menuBar.add(login);
          menuBar.add(user);
          
          //menuBar.insertSeparator(2);
          setJMenuBar(menuBar);
          
          pack();
          setSize(681, 700);
          setPreferredSize(new Dimension(681, 700));
          setResizable(false);
          
          setTitle("Solitare");
          
          //setBackground(new Color(0, 140, 0));
          setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          setLocationRelativeTo(null);
     }
     
     //checks if there is more then 1 window open or not to determinew if another can be opend
     private boolean canOppen()
     {
          Window[] win = getWindows();
          int show = 0;
          for (int i = 0; i < win.length; i++)
          {
               if (win[i].isShowing())  //count number of displayed windows
                    show++;
          }
          if (show > 1)
               return false;
          else                     //if only one return true
               return true;
     }
}