0

I am trying to design a UI for tic tac toe in java but I don't understand why is their a 5th row in the UI.I want to have four rows where bottom three rows would serve as buttons for Board of tictactoe and top row would be used as display toshow important messages to the users . I have attached the code and a snapshot of the UI.

//code
package TicTacToe;
import java.awt.*;

import javax.swing.*;

import java.awt.event.*;
public class TicTacToeUI extends JFrame implements ActionListener {

    private static final long serialVersionUID = 1L;
    JPanel[] row = new JPanel[4];
    JButton[] button = new JButton[9];
    String[] buttonString = {" "," "," ",
                             " "," "," ",
                             " "," "," "};
    Dimension displayDimension = new Dimension(290, 45);
    Dimension regularDimension = new Dimension(90, 90);
    JTextArea display = new JTextArea(2, 20);
    Font font = new Font("Times new Roman", Font.BOLD, 14);

    public TicTacToeUI(){
        super("TicTacToe");
         setDesign();
         setSize(350, 500);
         setResizable(false);
         setDefaultCloseOperation(EXIT_ON_CLOSE);
         GridLayout grid = new GridLayout(5,5);
         setLayout(grid);

         FlowLayout f1 = new FlowLayout(FlowLayout.CENTER);
            FlowLayout f2 = new FlowLayout(FlowLayout.CENTER,1,1);//gap in cells
            for(int i = 0; i < 4; i++ )
                row[i] = new JPanel();
            row[0].setLayout(f1);
            for(int i = 1; i < 4; i++)
                row[i].setLayout(f2);

            for(int i = 0; i < 9; i++) {
                button[i] = new JButton();
                button[i].setText(buttonString[i]);
                button[i].setBackground(Color.black);
                button[i].setFont(font);
                button[i].addActionListener(this);
            }

            display.setFont(font);
            display.setEditable(false);
            display.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
            display.setPreferredSize(displayDimension);

            for(int i = 0; i < 9; i++)
                button[i].setPreferredSize(regularDimension);

            row[0].add(display);
            add(row[0]);

            for(int i=1,k=0;i<4&&k<9;i++){
                for(int j=0;j<3;j++){
                    row[i].add(button[k]);
                    k++;
                }
                add(row[i]);
            }

            setVisible(true);
    }


    public final void setDesign() {
        try {
            UIManager.setLookAndFeel(
                    "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch(Exception e) {   
        }
    }
    public static void main(String[] args) {
        TicTacToeUI obj = new TicTacToeUI();
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        // TODO Auto-generated method stub
        int x,y;
        if(ae.getSource()==button[0]){
            x=0;
            y=0;
            display.setText("x = " + x + "y = " + y);
        }
        else if(ae.getSource()==button[1]){
            x=0;
            y=1;
            display.setText("x = " + x + "y = " + y);
        }
        else if(ae.getSource()==button[2]){
            x=0;
            y=2;
            display.setText("x = " + x + "y = " + y);
        }
        else if(ae.getSource()==button[3]){
            x=1;
            y=0;
            display.setText("x = " + x + "y = " + y);
        }
        else if(ae.getSource()==button[4]){
            x=1;
            y=1;
            display.setText("x = " + x + "y = " + y);
        }
        else if(ae.getSource()==button[5]){
            x=1;
            y=2;
            display.setText("x = " + x + "y = " + y);
        }
        else if(ae.getSource()==button[6]){
            x=2;
            y=0;
            display.setText("x = " + x + "y = " + y);
        }
        else if(ae.getSource()==button[7]){
            x=2;
            y=1;
            display.setText("x = " + x + "y = " + y);
        }
        else if(ae.getSource()==button[8]){
            x=2;
            y=2;
            display.setText("x = " + x + "y = " + y);
        }
    }

}

enter image description here

1 Answer 1

1

Well, I'm not sure if I understand your question, because the problem you have is in this line:

GridLayout grid = new GridLayout(5,5);

I you want to have 4 rows then just change it to:

GridLayout grid = new GridLayout(4,5);

Hope it helps.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.