【发布时间】:2015-03-25 21:14:48
【问题描述】:
我正在使用观察者模式来显示轮到谁来玩。我从我的 Observable 中获得了正确的数据,这就是我不发布它的原因。如您所见,正在设置文本,因为我可以调用 label.getText()。 标签怎么不更新了?
我尝试过重新绘制、重新验证、SwingUtilities.invokeLater、updateUI 和各种东西。我不知道我做错了什么。
先谢谢你了。
public class PlayersTurnPane extends JPanel implements Observer {
private JLabel label = new JLabel();
public PlayersTurnPane() {
setLayout(new BorderLayout());
setBackground(Color.gray);
label.setText("White");
label.setHorizontalAlignment(getWidth() / 2);
label.setFont(new Font("Serif", Font.PLAIN, 25));
add(label);
}
@Override
public void update(Observable arg0, Object arg1) {
label.setText((String)arg1); //But it will not update label
System.out.println(label.getText()); //The text is being set
}
}
我的观察者
public class TurnObserver extends Observable {
public TurnObserver(PlayersTurnPane playersTurnPane) {
addObserver(playersTurnPane);
}
public void setTurn(String turn){
setChanged();
notifyObservers(turn);
clearChanged();
}
}
我发送数据的地方
private TurnObserver turnObserver = new TurnObserver(new PlayersTurnPane());
public void grabPiece(BoardTile boardTile) {
if(focusedPiece != null && playerTurn.getCurrentTurn() == focusedPiece.getPieceColor()) {
boardTile.add(focusedPiece);
updateUI();
playerTurn.changeTurn();
turnObserver.setTurn(playerTurn.getCurrentTurn());
}
}
面板添加到这里
public class EastPanel extends JPanel {
public EastPanel() {
setLayout(new GridLayout(3,0));
add(new TimePane());
add(new MoveHistoryPane());
add(new PlayersTurnPane());
}
}
【问题讨论】:
-
考虑提供一个可运行的示例来演示您的问题
标签: java swing observer-pattern