嗨,我正在制作应用,但是,我发现了一个问题。我正在使用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;
我想感谢所有试图回答这个问题的人。
答案 0 :(得分:0)
尝试使用SwingUtilities.invokeLater()
确保您正在更改事件调度线程上的文本,如您所愿。我们所能做的只是猜测当前的信息。