我正在使用MVC / Observer模式构建Java程序,并设法在我的View(Observer)类中获取更新方法,记录我的Model(Observable)类的更改。下面的前3个组件是JTextFields,它们被正确设置为更新的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();
}
然而,尽管甚至在包含框架上调用repaint(),GUI根本没有更新 - 即使调用getText()显示更新的值,显示的文本字段仍为空白。这里的问题是什么?
从我的View(Observer)类中提取:
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);
}
非常感谢任何帮助!