1
\$\begingroup\$

I am new to swing and GUIS in general. I am not sure how to structure projects with gui so help me fix mistakes I have done in this project

Main:

import java.io.IOException;

public class Main {
 public static void main(String[] args) throws IOException {
     new Board();
 }
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseListener;

public class Board {
    static private JPanel[] fields = new JPanel[9];
    static private JPanel boardPanel = new JPanel();
    static private Frame frame = new Frame();
    static private JLabel[] labels = new JLabel[9];

    static private Mouse[] mouseListeners= new Mouse[9];
    public Board(){
        setUp();
    }
    private static void setUp(){
        boardPanel.setLayout(new GridLayout(3,3));
        boardPanel.setBounds(10, 10, 450, 450);

        for(int i = 0; i < fields.length; i++){
            mouseListeners[i] = new Mouse();
            labels[i] = new JLabel();
            labels[i].setFont(new Font(Font.MONOSPACED, Font.PLAIN, 100));
            labels[i].setVerticalAlignment(JLabel.CENTER);
            labels[i].setForeground(ColorPanel.getText());

            fields[i] = new JPanel();
            fields[i].setOpaque(true);
            fields[i].setBackground(ColorPanel.getFieldBackground());
            fields[i].setBorder(BorderFactory.createLineBorder(ColorPanel.getBorder(), 3));
            fields[i].addMouseListener(mouseListeners[i]);

            labels[i].setBounds(fields[i].getBounds());

            fields[i].add(labels[i]);
            boardPanel.add(fields[i]);
        }

        frame.add(boardPanel);
    }
    public static JPanel[] getField(){return fields;}
    public static JLabel[] getLabels(){return labels;}
    public static void setX(JLabel label){
        label.setText("X");
    }
    public static void freeze(){
        for(int i = 0; i < fields.length; i++){
            fields[i].removeMouseListener(mouseListeners[i]);
            if(fields[i].getBackground() != ColorPanel.getWinningBackground()) fields[i].setBackground(ColorPanel.getFieldBackground()); // When is draw one panel stay frozen in hover color
        }
    }
    public static void setCircle(JLabel label){
        label.setText("O");
    }
}
import java.awt.*;

public class GameLogic {
    private static boolean xTurn = true;
    private static int counter;
    public static void increaseCounter(){++counter;}

    public static boolean isxTurn() {
        return xTurn;
    }
    public static boolean checkFinished(){
        //for x
        if(Board.getLabels()[0].getText().equals("X") && Board.getLabels()[1].getText().equals("X") && Board.getLabels()[2].getText().equals("X")){
            paintWinningFields(0,1,2);
            return true;
        }
        else if(Board.getLabels()[3].getText().equals("X") && Board.getLabels()[4].getText().equals("X") && Board.getLabels()[5].getText().equals("X")){
            paintWinningFields(3,4,5);
            return true;
        }
        else if(Board.getLabels()[6].getText().equals("X") && Board.getLabels()[7].getText().equals("X") && Board.getLabels()[8].getText().equals("X")){
            paintWinningFields(6,7,8);
            return true;
        }
        else if(Board.getLabels()[1].getText().equals("X") && Board.getLabels()[4].getText().equals("X") && Board.getLabels()[7].getText().equals("X")){
            paintWinningFields(1,4,7);
            return true;
        }
        else if(Board.getLabels()[0].getText().equals("X") && Board.getLabels()[3].getText().equals("X") && Board.getLabels()[6].getText().equals("X")){
            paintWinningFields(0,3,6);
            return true;
        }
        else if(Board.getLabels()[2].getText().equals("X") && Board.getLabels()[5].getText().equals("X") && Board.getLabels()[8].getText().equals("X")){
            paintWinningFields(2,5,8);
            return true;
        }
        else if(Board.getLabels()[0].getText().equals("X") && Board.getLabels()[4].getText().equals("X") && Board.getLabels()[8].getText().equals("X")){
            paintWinningFields(0,4,8);
            return true;
        }
        else if(Board.getLabels()[2].getText().equals("X") && Board.getLabels()[4].getText().equals("X") && Board.getLabels()[6].getText().equals("X")){
            paintWinningFields(2,4,6);
            return true;
        }
        //for circle
        if(Board.getLabels()[0].getText().equals("O") && Board.getLabels()[1].getText().equals("O") && Board.getLabels()[2].getText().equals("O")){
            paintWinningFields(0,1,2);
            return true;
        }
        else if(Board.getLabels()[3].getText().equals("O") && Board.getLabels()[4].getText().equals("O") && Board.getLabels()[5].getText().equals("O")){
            paintWinningFields(3,4,5);
            return true;
        }
        else if(Board.getLabels()[6].getText().equals("O") && Board.getLabels()[7].getText().equals("O") && Board.getLabels()[8].getText().equals("O")){
            paintWinningFields(6,7,8);
            return true;
        }
        else if(Board.getLabels()[0].getText().equals("O") && Board.getLabels()[3].getText().equals("O") && Board.getLabels()[6].getText().equals("O")){
            paintWinningFields(0,3,6);
            return true;
        }
        else if(Board.getLabels()[1].getText().equals("O") && Board.getLabels()[4].getText().equals("O") && Board.getLabels()[7].getText().equals("O")){
            paintWinningFields(1,4,7);
            return true;
        }
        else if(Board.getLabels()[2].getText().equals("O") && Board.getLabels()[5].getText().equals("O") && Board.getLabels()[8].getText().equals("O")){
            paintWinningFields(2,5,8);
            return true;
        }
        else if(Board.getLabels()[0].getText().equals("O") && Board.getLabels()[4].getText().equals("O") && Board.getLabels()[8].getText().equals("O")){
            paintWinningFields(0,4,8);
            return true;
        }
        else if(Board.getLabels()[2].getText().equals("O") && Board.getLabels()[4].getText().equals("O") && Board.getLabels()[6].getText().equals("O")){
            paintWinningFields(2,4,6);
            return true;
        }
        else if(counter == 9) return true;
        return false;
    }
    private static void paintWinningFields(int a, int b, int c){
        Board.getField()[a].setBackground(ColorPanel.getWinningBackground());
        Board.getField()[b].setBackground(ColorPanel.getWinningBackground());
        Board.getField()[c].setBackground(ColorPanel.getWinningBackground());
    }
    public static void nextTurn(){xTurn = !xTurn;}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class Mouse implements MouseListener {
    private JPanel hoveredPanel;
    @Override
    public void mouseEntered(MouseEvent e) {
        for(int i = 0; i < Board.getField().length; ++i){
            if(Board.getField()[i] == e.getSource()) {
                Board.getField()[i].setBackground(ColorPanel.getFieldBackgroundOnHover());
                hoveredPanel = Board.getField()[i];
            }

        }


    }
    @Override
    public void mouseClicked(MouseEvent e) {
        for(int i = 0; i < Board.getField().length; ++i){
            if(e.getSource() == Board.getField()[i] && Board.getLabels()[i].getText().equals("")){
                if ((GameLogic.isxTurn())) {
                    Board.setX(Board.getLabels()[i]);
                } else {
                    Board.setCircle(Board.getLabels()[i]);
                }
                GameLogic.increaseCounter();
                GameLogic.nextTurn();
                if(GameLogic.checkFinished()) Board.freeze();
            }
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {

    }

    @Override
    public void mouseReleased(MouseEvent e) {

    }



    @Override
    public void mouseExited(MouseEvent e) {
        hoveredPanel.setBackground(ColorPanel.getFieldBackground());

    }
}
import java.awt.*;

public class ColorPanel {
    private static Color fieldBackground = Color.cyan;
    private static Color fieldBackgroundOnHover = new Color(0x123456);
    private static Color border = Color.blue;

    private static Color text = Color.red;
    private static Color winningBackground = Color.green;

    public static Color getWinningBackground() {
        return winningBackground;
    }

    public static Color getText() {
        return text;
    }

    public static Color getFieldBackground() {
        return fieldBackground;
    }

    public static Color getFieldBackgroundOnHover() {
        return fieldBackgroundOnHover;
    }

    public static Color getBorder() {
        return border;
    }
}
\$\endgroup\$

0

Browse other questions tagged or ask your own question.