I'm building a Java program using the MVC/Observer pattern and have managed to get the update method in my View (Observer) class logging changes from my Model (Observable) class. The first 3 components below are JTextFields which are correctly being set to an updated String.
public void update(Observable o, Object arg) {
textPlayer1.setText(model.getPlayerX().getName());
textPlayer2.setText(model.getPlayerO().getName());
textTurn.setText(model.determineTurn().getName());
frame.repaint();
}
However, despite even calling repaint() on the containing frame, the GUI isn't being updated at all - the text fields displayed remain blank even though calling getText() shows the updated values. What's the problem here?
Extract from my View (Observer) class:
public Connect4View(Connect4Game model, Connect4Controller controller) {
this.model = model;
model.addObserver(this);
this.controller = controller;
createGameWindow();
controller.setView(this);
update(model, null);
}
private void createGameWindow() {
frame = new JFrame("CONNECT FOUR");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createStatsPanel();
createGamePanel();
createButtonPanel();
frame.getContentPane().add(statsPanel);
frame.getContentPane().add(gamePanel);
gamePanel.add(buttonPanel);
frame.setBounds(100, 100, 750, 450);
frame.getContentPane().setLayout(null);
frame.setResizable(false);
frame.setVisible(true);
}
Any help would be very much appreciated!