I'm trying to fiddle with a connect four game and Im trying to modify it to make the user choose whether he/she likes it a two player game or against an AI and choose who takes the turn first (in the existing code first turn is random). So, I made two jframe that takes these as inputs from the user (radio button). However, I cannot make the original java to display after creating an instance of it. Here is what I have now:
Here is the constructor in the java where it calls the method setVisible(true) for the JFrame:
public class testAI2 extends JFrame implements ActionListener
{
JLabel lblPlayer = new JLabel("Player: ");
JLabel lblCurrentPlayer = new JLabel("Blue");
JPanel pnlMenu = new JPanel();
JPanel pnlBoards = new JPanel();
JButton btnNewGame2 = new JButton("New Game");
Board[][] Boards = new Board[7][6];
boolean winnerExists = false;
int currentPlayer = 1;
boolean AI;
public testAI2(boolean AI)
{
super("Four In A Line");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
chooseTurn turn = new chooseTurn();
currentPlayer = (int) turn.getTurnNumber();
this.AI = AI;
btnNewGame2.addActionListener(this);
switch(currentPlayer)
{
case 1:
lblCurrentPlayer.setForeground(Color.blue);
lblCurrentPlayer.setText("Blue");
break;
case 2:
lblCurrentPlayer.setForeground(Color.red);
lblCurrentPlayer.setText("Red");
break;
}
pnlMenu.add(btnNewGame2);
pnlMenu.add(lblPlayer);
pnlMenu.add(lblCurrentPlayer);
pnlBoards.setLayout(new GridLayout(6, 7));
for(int j = 0; j < 6; j++)
for(int i = 0; i < 7; i++)
{
Boards[i][j] = new Board(i, j);
Boards[i][j].addActionListener(this);
pnlBoards.add(Boards[i][j]);
}
add(pnlMenu, BorderLayout.NORTH);
add(pnlBoards, BorderLayout.CENTER);
setSize(500, 500);
setVisible(true);
if(currentPlayer == 2 && AI) insertTo(minimax());
}
PlayerorAI.java
private void playerSubmitActionPerformed(java.awt.event.ActionEvent evt) {
if(twoPlayer.isSelected()){
setPlayerNumber(2);
chooseTurn turn = new chooseTurn();
turn.setVisible(true);
turn.setLocationRelativeTo(null);
dispose();
}
else if (vsAi.isSelected()){
setPlayerNumber(1);
chooseTurn turn = new chooseTurn();
turn.setVisible(true);
turn.setLocationRelativeTo(null);
dispose();
}
else
JOptionPane.showMessageDialog(null, "Please Select One!", "Choose Players Error", JOptionPane.ERROR_MESSAGE);
}
chooseTurn.java
private void turnSubmitActionPerformed(java.awt.event.ActionEvent evt) {
PlayerorAI players = new PlayerorAI();
int playersNo = players.getPlayerNumber();
testAI2 test;
if(firstTurn.isSelected()){
setTurnNumber(1);
if (playersNo == 2){
test = new testAI2(false);
}
dispose();
}
else if (secondTurn.isSelected()){
setTurnNumber(2);
if (playersNo == 1){
test = new testAI2(true);
}
dispose();
}
else
JOptionPane.showMessageDialog(null, "Please Select One!", "Choose Players Error", JOptionPane.ERROR_MESSAGE);
}
Now, in the original code he has a main where he calls this constructor (new TestAI2(true) or new TestAI2(false)
) and it displays just fine, but why won't it display when I call it from chooseTurn.java?
Thanks in advance!