Hey guys trying to make this OO but no luck..can anyone help?

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





public class Main implements ActionListener {




     public static void main(String[] args) 
        {
        new Main();// Calling the class construtor.
        }//end main







    //Setting up ALL the variables
    JFrame window = new JFrame("Angels and Demons");

    //menubar
    JMenuBar mnuMain = new JMenuBar();
    JMenuItem mnuNewGame = new JMenuItem("New Game"),
    mnuInstruction = new JMenuItem("Instructions"),
    mnuExit = new JMenuItem("Exit"),
    mnuAbout = new JMenuItem("About");

    //Buttons 
    JButton btn1v1 = new JButton("Player vs Player"),
    btn1vCPU = new JButton("Player vs CPU"),
    btnBack = new JButton("<--back");
    JButton btnEmpty[] = new JButton[17];

    //Panel
    JPanel pnlNewGame = new JPanel(),
    pnlNorth = new JPanel(),
    pnlSouth = new JPanel(),
    pnlTop = new JPanel(),
    pnlBottom = new JPanel(),
    pnlPlayingField = new JPanel();
    JLabel lblTitle = new JLabel("Angels and Demons");


    JTextArea txtMessage = new JTextArea();



    final int winCombo[][] = new int[][] {
    {1, 2, 3, 4}, {5 ,6 ,7, 8}, {9, 10, 11, 12},
    {13, 14, 15, 16}, {1, 5, 9, 13}, {2, 6, 10, 14},
    {3, 7, 11, 15}, {4, 8, 12, 16}, {1, 6, 11, 16}, {4, 7, 10, 13}
    /*Horizontal Wins*/ /*Vertical Wins*/ /*Diagonal Wins*/
    };




    final int X = 450, Y = 300, color = 200;
    boolean inGame = false;
    boolean win = false;
    boolean btnEmptyClicked = false;
    String message;
    int turn = 1;
    int wonNumber1 = 1, wonNumber2 = 1, wonNumber3 = 1, wonNumber4 = 1;





        //--------------------------------CONSTRUCTOR---------------------------------------------------------
        public Main() 
        { //Setting game properties and layout and sytle...
        //Setting window properties:
        window.setSize(X, Y);
        window.setLocation(450, 260);
        window.setResizable(false);
        window.setLayout(new BorderLayout());
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Setting Panel layouts and properties
        pnlNewGame.setLayout(new GridLayout(2, 1, 2, 10));
        pnlNorth.setLayout(new FlowLayout(FlowLayout.CENTER));
        pnlSouth.setLayout(new FlowLayout(FlowLayout.CENTER));

        pnlNorth.setBackground(new Color(color-20, color-20, color-20));
        pnlSouth.setBackground(new Color(color, color, color));

        pnlTop.setBackground(new Color(color, color, color));
        pnlBottom.setBackground(new Color(color, color, color));

        pnlTop.setLayout(new FlowLayout(FlowLayout.CENTER));
        pnlBottom.setLayout(new FlowLayout(FlowLayout.CENTER));
        pnlNewGame.setBackground(Color.blue);

        //Adding menu items to menu bar
        mnuMain.add(mnuNewGame);
        mnuMain.add(mnuInstruction);
        mnuMain.add(mnuAbout);
        mnuMain.add(mnuExit);//---->Menu Bar Complete

        //Adding buttons to NewGame panel
        pnlNewGame.add(btn1v1);
        pnlNewGame.add(btn1vCPU);

        //Adding Action Listener to all the Buttons and Menu Items
        mnuNewGame.addActionListener(this);
        mnuExit.addActionListener(this);
        mnuInstruction.addActionListener(this);
        mnuAbout.addActionListener(this);
        btn1v1.addActionListener(this);
        btn1vCPU.addActionListener(this);
        btnBack.addActionListener(this);

        //Setting up the playing field
        pnlPlayingField.setLayout(new GridLayout(4, 4)); //4x4 grid
        pnlPlayingField.setBackground(Color.white);
            for(int i=1; i<=16; i++)
            {
            btnEmpty[i] = new JButton();
            btnEmpty[i].setBackground(new Color(220, 220, 220));
            btnEmpty[i].addActionListener(this);
            pnlPlayingField.add(btnEmpty[i]);
            }


        //Adding everything needed to pnlNorth and pnlSouth
        pnlNorth.add(mnuMain);
        pnlSouth.add(lblTitle);

        //Adding to window and Showing window
        window.add(pnlNorth, BorderLayout.NORTH);
        window.add(pnlSouth, BorderLayout.CENTER);
        window.setVisible(true);
        }
        //----------------------------------END CONSTRUCTOR------------------------------------------------------













//-------------------START OF ACTION PERFORMED CLASS-------------------------//
        public void actionPerformed(ActionEvent click)
        {
        Object source = click.getSource();

         for(int i=1; i<=16; i++)
         {
            if(source == btnEmpty[i] && turn < 17) 
            {
            btnEmptyClicked = true;

            //this means that angel will go first (player1) then demon (player2)
            if(!(turn % 2 == 0))
            btnEmpty[i].setText("Angel");
            else
            btnEmpty[i].setText("Demon");
            btnEmpty[i].setEnabled(false);
            pnlPlayingField.requestFocus();
            turn++;
            }//end IF
        }//end loop



        if(btnEmptyClicked)
        {
            checkWin();
            btnEmptyClicked = false;
        }//emd IF



        if(source == mnuNewGame)
        {
            clearPanelSouth();
            pnlSouth.setLayout(new GridLayout(2, 1, 2, 5));
            pnlTop.add(pnlNewGame);
            pnlBottom.add(btnBack);
            pnlSouth.add(pnlTop);
            pnlSouth.add(pnlBottom);
        }







        else if(source == btn1v1) 
        {
            if(inGame)
            {
            int option = JOptionPane.showConfirmDialog(null, "If you start a new game," +
            "your current game will be lost..." + "\n" +
            "Are you sure you want to continue?",
            "Quit Game?" ,JOptionPane.YES_NO_OPTION);
                if(option == JOptionPane.YES_OPTION)
                {
                inGame = false;
                }//END INNER INNER IF
            }//END INNER IF


        if(!inGame) 
        {
        btnEmpty[wonNumber1].setBackground(new Color(220, 220, 220));
        btnEmpty[wonNumber2].setBackground(new Color(220, 220, 220));
        btnEmpty[wonNumber3].setBackground(new Color(220, 220, 220));
        btnEmpty[wonNumber4].setBackground(new Color(220, 220, 220));
        turn = 1;


            for(int i=1; i<17; i++) 
            {
            btnEmpty[i].setText("");
            btnEmpty[i].setEnabled(true);
            }//end loop

        win = false;
        showGame();

        }
        }












        //If the user clicks on the button to play against the computer
        else if(source == btn1vCPU)
        {

          //HAVENT TACKELD THIS YET


        }





















        else if(source == mnuExit)
        {
        int option = JOptionPane.showConfirmDialog(null, "Are you sure you want to exit?",
        "Exit Game" ,JOptionPane.YES_NO_OPTION);
        if(option == JOptionPane.YES_OPTION)
        System.exit(0);
        }


        else if(source == mnuInstruction || source == mnuAbout)
        {
        clearPanelSouth();
        String message = "";
        txtMessage.setBackground(new Color(color, color, color));

                if(source == mnuInstruction)
                {
                message = "Instructions:\n\n" +
                "Your goal is to be the first player to get 4 pieces in a\n" +
                ". (horizontally or vertically)\n" +
                        "\n";
                } 

                else {
                message = "About:\n\n" +
                 ;


                }//END NESTED IF


        txtMessage.setEditable(false);
        txtMessage.setText(message);
        pnlSouth.setLayout(new GridLayout(2, 1, 2, 5));
        pnlTop.add(txtMessage);
        pnlBottom.add(btnBack);
        pnlSouth.add(pnlTop);
        pnlSouth.add(pnlBottom);
        }

        else if(source == btnBack)
        {
            if(inGame)
            showGame();
            else {
            clearPanelSouth();
            pnlSouth.setLayout(new FlowLayout(FlowLayout.CENTER));
            pnlNorth.setVisible(true);
            pnlSouth.add(lblTitle);
            }//end nested IF
        }
        pnlSouth.setVisible(false);
        pnlSouth.setVisible(true);
        }//--------------------------END OF ACTION PERFORMED CLASS-------------------------//

/*
----------------------------------
Start of all the other methods. |
----------------------------------
*/
        public void showGame()
        { // Shows the Playing Field
        // *IMPORTANT*- Does not start out brand new (meaning just shows what it had before)

            clearPanelSouth();
            inGame = true;


            pnlSouth.setLayout(new BorderLayout());
            pnlSouth.add(pnlPlayingField, BorderLayout.CENTER);
            pnlPlayingField.requestFocus();

        }




    public void checkWin() { // checks if there are 4 symbols in a row vertically, diagonally, or horizontally.
    // then shows a message and disables buttons.

        for(int i=0; i<8; i++) {

        if
        (
        !btnEmpty[winCombo[i][0]].getText().equals("") &&

        btnEmpty[winCombo[i][0]].getText().equals(btnEmpty[winCombo[i][1]].getText()) &&

        btnEmpty[winCombo[i][1]].getText().equals(btnEmpty[winCombo[i][2]].getText()) &&

        btnEmpty[winCombo[i][2]].getText().equals(btnEmpty[winCombo[i][3]].getText())       
        )

/*
The way this checks the if someone won is:
First: it checks if the btnEmpty[x] is not equal to an empty string- x being the array number
inside the multi-dementional array winCombo[checks inside each of the 7 sets][the first number]
Secong: it checks if btnEmpty[x] is equal to btnEmpty[y]- x being winCombo[each set][the first number]
y being winCombo[each set the same as x][the second number] (So basically checks if the first and
second number in each set is equal to each other)
Third: it checks if btnEmtpy[y] is eual to btnEmpty[z]- y being the same y as last time and z being
winCombo[each set as y][the third number]
Conclusion: So basically it checks if it is equal to the btnEmpty is equal to each set of numbers
*/

      {
        win = true;
        wonNumber1 = winCombo[i][0];
        wonNumber2 = winCombo[i][1];
        wonNumber3 = winCombo[i][2];
        wonNumber4 = winCombo[i][3];
        btnEmpty[wonNumber1].setBackground(Color.green);
        btnEmpty[wonNumber2].setBackground(Color.green);
        btnEmpty[wonNumber3].setBackground(Color.green);
        btnEmpty[wonNumber4].setBackground(Color.green);

        break;
        }
        }
            if(win || (!win && turn>16)) 
            {
                if(win) 
                {
                    if(turn % 2 == 0)
                    message = "Angel has won!";
                    else
                    message = "Demon has won!";
                    win = false;
                 }
                else if(!win && turn>16)
                {
                message = "Both players have tied!\nBetter luck next time.\n\nClick on 'New Game' to start again";
                }//end inner IF


                JOptionPane.showMessageDialog(null, message);
                for(int i=1; i<=16; i++) 
                {
                btnEmpty[i].setEnabled(false);
                }
          }//end outer if
        }

        public void clearPanelSouth() { //Removes all the possible panels
        //that pnlSouth, pnlTop, pnlBottom
        //could have.
        pnlSouth.remove(lblTitle);
        pnlSouth.remove(pnlTop);
        pnlSouth.remove(pnlBottom);
        pnlSouth.remove(pnlPlayingField);
        pnlTop.remove(pnlNewGame);
        pnlTop.remove(txtMessage);
        pnlBottom.remove(btnBack);
        }



}//end class

according to me your code follows the concepts of object oriented programming.

There's absolutely nothing in the design of this program that would make it "object oriented", other than those aspects mandated by Java itself.
It's just a single instance of a single class - which could just as well have been all static members. This is taken to extreme - eg to avoid separate classes for action listeners (!) this uses one gigantic listener method that rambles incomprehensibly for nearly 200 lines (and ps: actionPeformed is a method, not a class).
Maybe the application is not large or complex enough for this to matter, but I'm just answering the question as asked.

If this were an OO application I would expect to see some kind of Game class that encapsulates the rules and state of the game itself - maybe with ancilliary classes like Player or Board or Piece etc depending on the game's complexity. Then there would be a separate GUI class or classes that front-end the Game in an MVC pattern of some sort.

Edited 3 Years Ago by JamesCherrill

This question has already been answered. Start a new discussion instead.