Java:第一次单击按钮不会更改文本,但会更新数据库

问题描述 投票:0回答:1

正如标题所示,第一次单击时文本不会更改,但数据库更新会运行并更改值。然而,对于每一次成功的点击,它都会按预期工作,尽管现在的值只是相反。

我尝试过混淆我的陈述顺序,但无济于事。

这是我的代码

package controller;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.Initializable;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import entity.Settings;

public class GradeViewController implements Initializable {
    
    @FXML
    @Override
    public void initialize(URL url, ResourceBundle rb) {
         SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();

            // Load the GradeView entity (assuming you have an ID for it)
            Settings gradeView = session.get(Settings.class, 0);

            if (gradeView.getStatus()== 0) {
                btnGradeView.setText("Enable Grade Viewing");
                      gradeView.setStatus(0);
            } else {
                btnGradeView.setText("Disable Grade Viewing");
                      gradeView.setStatus(1);
            }

    }    

    private void setGradeViewToggle() {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction tx = null;
        
                try {
            tx = session.beginTransaction();

            // Load the GradeView entity (assuming you have an ID for it)
            Settings gradeView = session.get(Settings.class, 0);

            if (gradeView.getStatus()== 0) {
           
                // Set the "status" to 1 to enable
                gradeView.setStatus(1);
               btnGradeView.setText("Enable Grade Viewing");
            } else {
         
                // Set the "status" to 0 to disable
                gradeView.setStatus(0);
               btnGradeView.setText("Disable Grade Viewing");
            }

            // Persist the changes to the database
            session.update(gradeView);

            tx.commit();
        } catch (Exception e) {
            if (tx != null) {
                tx.rollback();
            }
            e.printStackTrace();
            // Handle any exceptions
        } finally {
            session.close();
            sessionFactory.close();
        }
     }
     
    
    @FXML
    private void actionSetGradeViewToggle(ActionEvent event) {
        setGradeViewToggle();
    }
    
    
}

我尝试过混淆陈述的顺序。 我期望该按钮在第一次单击时起作用,并在第一次单击时更改文本。

java button textchanged
1个回答
0
投票

在初始化方法中,您根据从数据库检索的gradeView.getStatus() 值设置按钮文本。如果是这种情况,您应该确保在调用初始化方法之前正确设置数据库的初始状态 (gradeView.getStatus())。要确保按钮和数据库状态在第一次单击时同步,您应该仔细检查数据库中gradeView.getStatus()的初始值。如果它没有按预期工作,可能是由于数据库中的初始数据所致。另外,您可以添加一些调试打印语句来检查初始化方法中的gradeView.getStatus()的初始值,以帮助诊断问题。这里是如何添加调试语句:

System.out.println("Initial gradeView.getStatus(): " + gradeView.getStatus()); 
这将帮助您验证按钮的初始状态和数据库值是否一致。

© www.soinside.com 2019 - 2024. All rights reserved.