如何更新其他类中的JLabel

时间:2018-06-14 14:51:25

标签: java swing oop jlabel

我有GridButtonPanel这样的here is类,我在createNavPanel中有一个像这样的JLabel void:

public JPanel box;         
public JLabel cpLabel; 


n = new JPanel(new BorderLayout());
box = new JPanel();
box.setLayout(new BoxLayout(box, BoxLayout.Y_AXIS));
cpLabel = gui.currentPlayerLabel(game.currentPlayer);
box.add(cpLabel);
n.add(box, BorderLayout.WEST);

我当然还有其他一些东西...... gui.currentPlayer就是这样:

JLabel currentPlayerLabel(int cp) {
    JLabel l = new JLabel();
    switch(cp){
        case 1 : l.setText("Current Player: Player 1");
                 l.setForeground(Color.green);
                 break;
        case 2 : l.setText("Current Player: Player 2");
                 l.setForeground(Color.blue);
                 break;
    }
    return l;
}

我将所有内容添加到主JFrame中,如下所示: f.add(createNavPanel(), BorderLayout.NORTH);

我还有一个班级,gui。在这里,我要做一些工作,我想更新cpLabel。我试过这样:

    private void changePlayerLabel(){
    int cp = game.currentPlayer;
    switch(cp){
        case 1 : 
                 gpanel.cpLabel.setText("Current Player: Player 1");
                 gpanel.cpLabel.setForeground(Color.green);
                 break;
        case 2 : gpanel.cpLabel.setText("Current Player: Player 2");
                 gpanel.cpLabel.setForeground(Color.blue);
                 break;
    }
}

但在这种情况下,这不起作用。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

这不是创建新JLabel并将其添加到旧版本的解决方案。直接更改,像这样

gpanel.cpLabel.setText("Some label text");

喜欢这样:

 JLabel l = new JLabel();
 l.setText("Some label text");
 gpanel.cpLabel = l;