I’m having difficulty kicking off a new session. When I use the menu option new game, I get a new instance – when really, I just want to replace the current instance with a new one. I have tried many different things and still can’t solve it…
Here is my code:
package tictactoe;
import java.awt.BorderLayout;
import java.awt.Color;
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.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class TicTacToe2 extends JFrame implements ActionListener {
char[][] game = new char[3][3];
JButton[][] buttons = new JButton[3][3];
JButton menuItem = new JButton();
JMenu menu = new JMenu ("TicTacToe");
JMenuItem newgame = new JMenuItem("Start New Game"),
exit = new JMenuItem("Exit");
TicTacToe2()
{
super("Tic Tac Toe");
setSize(500, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
setLayout( new BorderLayout());
JPanel northPanel= new JPanel();
northPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
add("North", northPanel);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(3,3, 4, 4));
add("Center", buttonPanel);
Font font = new Font("Serif", Font.BOLD, 32);
for (int row=0; row < game.length; row++)
{
for (int col =0; col < game[row].length; col++)
{
game[row][col] = ' ';
JButton b = new JButton(" ");
b.setFont(font);
b.setBackground(Color.green);
b.addActionListener(this);
buttons[row][col] = b;
buttonPanel.add(b);
}
}
menu.add(newgame);
menu.add(exit);
newgame.addActionListener(this);
exit.addActionListener(this);
JMenuBar bar = new JMenuBar( );
bar.add(menu);
setJMenuBar(bar);
}
public void actionPerformed(ActionEvent e) {
Object menusource = e.getSource();
if(menusource == newgame){
new TicTacToe2();
}else if(menusource == exit){
System.exit(0);
}
}
public static void main(String[] args) {
TicTacToe2 ttt = new TicTacToe2();
}
}
As above answer already mentioned that you do not have to create a new instance like
So, i will continue from there. Your if statement should be something like
Create a function which looks like something below which sets layout and adds the component to it. Put your drawing logic there and give it as an argument to setContent pane. For example
I hope you are getting the logic here