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;
}
}