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

这是第一个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);
    }


这是第三个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和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;
    }
}

最佳答案

(基于RubioRicMadProgrammer的注释)

该代码有两个问题:


ScoreStorage中的设置器不起作用:



  您在ScoreStorage.setRawscore中输入错误,正在分配this.Rawscore = Raswcore而不是this.Rawscore = rawscore,因此Rawscore的值始终为0。


(还请注意,ScoreStorage.increment()可能没有做应做的事情,因为它仅重新分配了值。)


您创建多个ScoreStorage对象。



  每次选择一个选项时,您都在创建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);
    }

关于java - JLabel不会显示Getter的正确值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49147922/

10-08 23:17