I'm making a tic tac toe game and on the bottom of my frame with the board I'm trying to add a panel with a menu, reset, and quit button. To do this I've made two JPanels, one for the board itself and one for these buttons. When I add both components to the JFrame, my reset, menu, and quit button won't resize. Why is this occurring and how can I fix it?
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Board extends JFrame implements ActionListener {
private JButton one = new JButton();
private JButton two = new JButton();
private JButton three = new JButton();
private JButton four = new JButton();
private JButton five = new JButton();
private JButton six = new JButton();
private JButton seven = new JButton();
private JButton eight = new JButton();
private JButton nine = new JButton();
private JButton resetButton = new JButton("Reset");
private JLabel placeHolder = new JLabel("");
private JButton menuButton = new JButton("Menu");
private JButton exitButton = new JButton("Exit");
private Font f = new Font("Arial", Font.BOLD, 100);
public Board() {
setTitle("Tic-Tac-Toe Game");
setLayout(new GridLayout(2,1));
setDefaultCloseOperation(EXIT_ON_CLOSE);
// Panel containing all buttons for game play
JPanel gameBoard = new JPanel();
gameBoard.setLayout(new GridLayout(3,3,8,8));
gameBoard.add(one);
gameBoard.add(two);
gameBoard.add(three);
gameBoard.add(four);
gameBoard.add(five);
gameBoard.add(six);
gameBoard.add(seven);
gameBoard.add(eight);
gameBoard.add(nine);
one.setPreferredSize(new Dimension(150, 150));
// Panel used to put reset button on board
JPanel resetButtonPanel = new JPanel();
resetButtonPanel.setLayout(new GridLayout(1,3,8,8));
resetButtonPanel.add(menuButton);
resetButtonPanel.add(resetButton);
resetButtonPanel.add(exitButton);
// Adding all components to the Board() constructor
add(gameBoard);
add(resetButtonPanel);
// Adds listeners to all buttons on board
one.addActionListener(this);
two.addActionListener(this);
three.addActionListener(this);
four.addActionListener(this);
five.addActionListener(this);
six.addActionListener(this);
seven.addActionListener(this);
eight.addActionListener(this);
nine.addActionListener(this);
resetButton.addActionListener(this);
exitButton.addActionListener(this);
menuButton.addActionListener(this);
// Turn off focus on all buttons to avoid blue outline around buttons during game
one.setFocusable(false);
two.setFocusable(false);
three.setFocusable(false);
four.setFocusable(false);
five.setFocusable(false);
six.setFocusable(false);
seven.setFocusable(false);
eight.setFocusable(false);
nine.setFocusable(false);
// Sets all buttons to same font
one.setFont(f);
two.setFont(f);
three.setFont(f);
four.setFont(f);
five.setFont(f);
six.setFont(f);
seven.setFont(f);
eight.setFont(f);
nine.setFont(f);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
int turn = 0;
public void actionPerformed(ActionEvent e) {
if (e.getSource() == one) {
turn++;
if(turn%2 == 0) {
one.setText("X");
}else{
one.setText("O");
}
one.setEnabled(false);
checkWin();
}
if (e.getSource() == two) {
turn++;
if(turn%2 == 0) {
two.setText("X");
}else{
two.setText("O");
}
two.setEnabled(false);
checkWin();
}
if (e.getSource() == three) {
turn++;
if(turn%2 == 0) {
three.setText("X");
}else{
three.setText("O");
}
three.setEnabled(false);
checkWin();
}
if (e.getSource() ==four) {
turn++;
if(turn%2 == 0) {
four.setText("X");
}else{
four.setText("O");
}
four.setEnabled(false);
checkWin();
}
if (e.getSource() == five) {
turn++;
if(turn%2 == 0) {
five.setText("X");
}else{
five.setText("O");
}
five.setEnabled(false);
checkWin();
}
if (e.getSource() == six) {
turn++;
if(turn%2 == 0) {
six.setText("X");
}else{
six.setText("O");
}
six.setEnabled(false);
checkWin();
}
if (e.getSource() == seven) {
turn++;
if(turn%2 == 0) {
seven.setText("X");
}else{
seven.setText("O");
}
seven.setEnabled(false);
checkWin();
}
if (e.getSource() == eight) {
turn++;
if(turn%2 == 0) {
eight.setText("X");
}else{
eight.setText("O");
}
eight.setEnabled(false);
checkWin();
}
if (e.getSource() == nine) {
turn++;
if(turn%2 == 0) {
nine.setText("X");
}else{
nine.setText("O");
}
nine.setEnabled(false);
checkWin();
}
if(e.getSource() == resetButton) {
dispose();
new Board();
}
if(e.getSource() == exitButton) {
System.exit(0);
}
if(e.getSource() == menuButton) {
dispose();
new Menu();
}
}
// Tests all possible win scenarios
public void checkWin() {
String oneText = one.getText();
String twoText = two.getText();
String threeText = three.getText();
String fourText = four.getText();
String fiveText = five.getText();
String sixText = six.getText();
String sevenText = seven.getText();
String eightText = eight.getText();
String nineText = nine.getText();
if(oneText.equals(twoText) && twoText.equals(threeText) && !oneText.equals("") && !twoText.equals("") && !threeText.equals("")){
one.setBackground(Color.green);
one.setOpaque(true);
two.setBackground(Color.green);
two.setOpaque(true);
three.setBackground(Color.green);
three.setOpaque(true);
disableButtons();
}
if(oneText.equals(fiveText) && fiveText.equals(nineText) && !oneText.equals("") && !fiveText.equals("") && !nineText.equals("")) {
one.setBackground(Color.green);
one.setOpaque(true);
five.setBackground(Color.green);
five.setOpaque(true);
nine.setBackground(Color.green);
nine.setOpaque(true);
disableButtons();
}
if(oneText.equals(fourText) && fourText.equals(sevenText) && !oneText.equals("") && !fourText.equals("") && !sevenText.equals("")) {
one.setBackground(Color.green);
one.setOpaque(true);
four.setBackground(Color.green);
four.setOpaque(true);
seven.setBackground(Color.green);
seven.setOpaque(true);
disableButtons();
}
if(twoText.equals(fiveText) && fiveText.equals(eightText) && !twoText.equals("") && !fiveText.equals("") && !eightText.equals("")) {
two.setBackground(Color.green);
two.setOpaque(true);
five.setBackground(Color.green);
five.setOpaque(true);
eight.setBackground(Color.green);
eight.setOpaque(true);
disableButtons();
}
if(threeText.equals(sixText) && sixText.equals(nineText) && !threeText.equals("") && !sixText.equals("") && !nineText.equals("")) {
three.setBackground(Color.green);
three.setOpaque(true);
six.setBackground(Color.green);
six.setOpaque(true);
nine.setBackground(Color.green);
nine.setOpaque(true);
disableButtons();
}
if(threeText.equals(fiveText) && fiveText.equals(sevenText) && !threeText.equals("") && !fiveText.equals("") && !sevenText.equals("")) {
three.setBackground(Color.green);
three.setOpaque(true);
five.setBackground(Color.green);
five.setOpaque(true);
seven.setBackground(Color.green);
seven.setOpaque(true);
disableButtons();
}
if(fourText.equals(fiveText) && fiveText.equals(sixText) && !fourText.equals("") && !fiveText.equals("") && !sixText.equals("")) {
four.setBackground(Color.green);
four.setOpaque(true);
five.setBackground(Color.green);
five.setOpaque(true);
six.setBackground(Color.green);
six.setOpaque(true);
disableButtons();
}
if(sevenText.equals(eightText) && eightText.equals(nineText) && !sevenText.equals("") && !eightText.equals("") && !nineText.equals("")) {
seven.setBackground(Color.green);
seven.setOpaque(true);
eight.setBackground(Color.green);
eight.setOpaque(true);
nine.setBackground(Color.green);
nine.setOpaque(true);
disableButtons();
}
}
// Method to turn off buttons when a win occurs
public void disableButtons(){
one.setEnabled(false);
two.setEnabled(false);
three.setEnabled(false);
four.setEnabled(false);
five.setEnabled(false);
six.setEnabled(false);
seven.setEnabled(false);
eight.setEnabled(false);
nine.setEnabled(false);
}
}
Is this how the array should be used to minimize repetitiveness?
JButton[] buttons = {one, two, three, four, five, six, seven, eight, nine};
// Panel containing all buttons for game play
JPanel gameBoard = new JPanel();
gameBoard.setLayout(new GridLayout(3,3,8,8));
for(int i = 0; i < buttons.length; i++){
gameBoard.add(buttons[i]);
}
one.setPreferredSize(new Dimension(150, 150));