I want to save the current position of the pieces on the board after the user clicks on the save button. I have implemented 'Serializable' in the Board class but when I click on the save button, there are some runtime errors. Can you help me solve this kind of problem? I'm new to this java GUI. Thank you in advance.
What I have tried:
public class Board extends JPanel implements ActionListener, Serializable
{
JPanel cardss;
JButton[] square = new JButton[42];
JButton save = new JButton("Save");
JButton quit = new JButton("Quit");
MenuPage menupage;
Tile tile = Tile.getInstance();
boolean firstClick = true;
int count = 0;
int player = 1;
JLabel player_label;
JLabel player_status;
JFrame frame = new JFrame();
JFrame f;
private Board()
{
Dimension boardSize = new Dimension(600, 650);
Dimension player_panel = new Dimension(180, 650);
JPanel topPanel = new JPanel(new FlowLayout());
JPanel boardPanel = new JPanel(new GridLayout(0,7));
JPanel player_turn = new JPanel(new FlowLayout());
player_turn.setBackground(Color.yellow);
player_label = new JLabel("Moved : " + count);
player_status = new JLabel("TURN : PLAYER " + player);
player_turn.add(player_label);
player_turn.add(player_status);
save.addActionListener(this);
quit.addActionListener(this);
topPanel.add(save);
topPanel.add(quit);
for(int i=0; i<42; i++)
{
square[i] = new JButton();
if(i%2==0)
{
square[i].setBackground(Color.black);
tile.setTileFalse(i);
square[i].addActionListener(this);
}
else
{
square[i].setBackground(Color.white);
tile.setTileFalse(i);
square[i].addActionListener(this);
}
boardPanel.add(square[i]);
tile.setTileLoc(i);
}
boardPanel.setPreferredSize( boardSize );
player_turn.setPreferredSize( player_panel);
setLayout(new BorderLayout(2,2));
add(topPanel, BorderLayout.NORTH);
add(boardPanel, BorderLayout.WEST);
add(player_turn, BorderLayout.EAST);
setSize(800,800);
setVisible(true);
}
private static class SingletonHolder {
private static final Board INSTANCE = new Board();
}
public static Board getInstance() {
return SingletonHolder.INSTANCE;
}
public void actionPerformed(ActionEvent e)
{
String choice_in_game = e.getActionCommand();
if(choice_in_game.equals("Save"))
{
try
{
FileOutputStream file = new FileOutputStream("chess.txt");
ObjectOutputStream object = new ObjectOutputStream(file);
object.writeObject(new Board());
object.close();
JDialog d = new JDialog(f, "Chess Game");
JLabel l = new JLabel("Game is successfully saved!");
d.add(l);
d.setSize(200,100);
d.setLocationRelativeTo(null);
d.setVisible(true);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
public void setPiecePic(int i, String name){
square[i].setIcon(loadImage(name));
tile.setTileTrue(i);
}
public void setPieceNull(int i){
square[i].setIcon(null);
tile.setTileFalse(i);
}
private ImageIcon loadImage(String path){
Image image = new ImageIcon(this.getClass().getResource(path)).getImage();
Image scaledImage = image.getScaledInstance(82, 82, java.awt.Image.SCALE_SMOOTH);
return new ImageIcon(scaledImage);
}
public void setEveryPiece(){
setPiecePic(0,"PlusB.png");
setPiecePic(1,"TriangleB.png");
setPiecePic(2,"ChevronB.png");
setPiecePic(3,"SunB.png");
setPiecePic(4,"ChevronB.png");
setPiecePic(5,"TriangleB.png");
setPiecePic(6,"PlusB.png");
setPiecePic(35,"PlusR.png");
setPiecePic(36,"TriangleR.png");
setPiecePic(37,"ChevronR.png");
setPiecePic(38,"SunR.png");
setPiecePic(39,"ChevronR.png");
setPiecePic(40,"TriangleR.png");
setPiecePic(41,"PlusR.png");
tile.setAllPiece();
}
public JButton getButton(int x){
return square[x];
}
public JButton[] getSquare(){
return square;
}
public void getStatus(int count, int player) {
player_label.setText("Moved: " + count);
player_status.setText("TURN : PLAYER " + player);
}
}