如何从另一个类更改jlabel文本

时间:2014-06-20 08:10:25

标签: java swing jlabel

嗨,我正在制作应用,但是,我发现了一个问题。我正在使用netbeans gui builder来构建我的gui。

所以,第一个gui类有很多按钮(每个按钮都执行相同的功能),它们有一个如下所示的actionlistener:

public class Guipanel extends JPanel {
private void jbtTTActionPerformed(java.awt.event.ActionEvent evt) {                                      
    if(mb.getlevel() > 16){
    if(ttp != 20 && mb.getpoints() != 0){
        point();
        ttp++;
        jbtTT.setText(""+ttp);
        }
    }
}
private void point(){
    mb.reducepoints();
}
int ttp;
Base mb = new Base();
JButton jbtTT = new JButton();
}

Base Class有很多方法,但与此问题相关的方法如下:

public class Base extends JFrame {

//point decrement method
public void reducepoints(){
    points--;
    jlbPoints.setText("Points Available: "+points);
}

//return point value
public int getpoints(){
    return this.points;
}

//return level value
public int getlevel(){
    return this.level;
}
private static int level = 1;
private static int points = 20;
private JLabel jlbPoints = new JLabel("Points Available: "+points);
}

所以问题是这样,当我按下jbtTT时,points变量将递减,因此值将从20变为19.我使用System.out.println来验证。正如您所看到的,reducepoints()方法应该更新它没有的jlbPoints文本。我已尝试将Base mb = new Base()设为static Base mb = new Base(),但仍然无效。我做错了吗?有人有建议吗?

编辑:我尝试System.out.println(jlbPoints.getText());并且文本确实发生了变化。唯一没有改变的是用户可以看到的文本。即使repaint()revalidate也无效。

EDIT2:我终于找到了这个问题的答案。我必须将'Base'类对象传递给'Guipanel'类,因为我在主类中创建了'Base'类对象(我不想将此类用作主类)。我用以下方法传递了它:

public void passObj(Base mb){
    this.mb = mb;
}

并更改'Guipanel'类的构造函数,如下所示:

public Guipanel(Base mb) {
    initComponents();
    this.mb = mb;
}

也将此Base mb = new Base();更改为Base mb;

我想感谢所有试图回答这个问题的人。

1 个答案:

答案 0 :(得分:0)

尝试使用SwingUtilities.invokeLater()确保您正在更改事件调度线程上的文本,如您所愿。我们所能做的只是猜测当前的信息。