JLabel不会显示Getter的正确值

时间:2018-03-07 09:07:48

标签: java

在我的项目中,我的问题是JLabel不会显示getter增加的值。每当我选择正确的单选按钮时,它应该加起来。

这是第一个JFrame

public class DifEasy extends javax.swing.JFrame {

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

//        jPanel1.setVisible(false);
        if (q1a1.isSelected()){
            ScoreStorage mehh = new ScoreStorage();
            mehh.setRawscore(mehh.getRawscore()+1);

        }
        this.setVisible(false);
        new DifEasy1().setVisible(true);
    } 

这是第二个JFrame

public class DifEasy1 extends javax.swing.JFrame {
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        if (q1a1.isSelected()){
            ScoreStorage mehh = new ScoreStorage();          
            mehh.setRawscore(mehh.getRawscore()+1);

        }
        this.setVisible(false);
        new DifEasy2().setVisible(true);
    }

这是第3个JFrame

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        if (q1a1.isSelected()){
            ScoreStorage mehh = new ScoreStorage();          
            mehh.setRawscore(mehh.getRawscore()+1);
            jLabel1.setText(String.valueOf(mehh.getRawscore()));
        }
    }  

顺便说一句,我只是把JLabel放在那里进行测试。单击JButton(假设我选择了q1a1单选按钮),JLabel应该变为3,但它只显示为0.

Getters and Setters类

public class ScoreStorage {

    private int Rawscore = 0;

    public void setRawscore(int rawscore){
        this.Rawscore = Rawscore;
    }

    public int getRawscore(){
        return Rawscore;
    }

    public synchronized void increment(){
        setRawscore(Rawscore);
    }

    public int reset(){
        Rawscore = 0;
        return Rawscore;
    }
}

1 个答案:

答案 0 :(得分:1)

(基于RubioRicMadProgrammer的评论)

代码有两个问题:

  1. ScoreStorage中的Setter无法正常工作:
  2.   

    您在ScoreStorage.setRawscore中输入了拼写错误,您指定this.Rawscore = Raswcore而不是this.Rawscore = rawscore,因此Rawscore的值始终为0.

    (另请注意,ScoreStorage.increment()可能不会做它应该做的事情,因为它只会重新分配值。)

    1. 您可以创建多个ScoreStorage个对象。
    2.   

      每次选择一个选项时,您都会创建ScoreStorage的全新实例,该实例初始化为0

           

      您可以实现方法setScoreStorage或创建一个在JFrames中接受该参数的构造函数。

      以下是如何在不同的JFrame与构造函数之间传递一个ScoreStorage的简短示例

      public class DifEasy extends JFrame {
          private ScoreStorage scoreStorage;
      
          public DifEasy(ScoreStorage scoreStorage) {
              this.scoreStorage = scoreStorage;
          }
      
          private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
              if (q1a1.isSelected()){
                  scoreStorage.setRawscore(scoreStorage.getRawscore()+1);
              }
              this.setVisible(false);
              new DifEasy1(scoreStorage).setVisible(true);
          }