正如标题所示,第一次单击时文本不会更改,但数据库更新会运行并更改值。然而,对于每一次成功的点击,它都会按预期工作,尽管现在的值只是相反。
我尝试过混淆我的陈述顺序,但无济于事。
这是我的代码
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();
}
}
我尝试过混淆陈述的顺序。 我期望该按钮在第一次单击时起作用,并在第一次单击时更改文本。
在初始化方法中,您根据从数据库检索的gradeView.getStatus() 值设置按钮文本。如果是这种情况,您应该确保在调用初始化方法之前正确设置数据库的初始状态 (gradeView.getStatus())。要确保按钮和数据库状态在第一次单击时同步,您应该仔细检查数据库中gradeView.getStatus()的初始值。如果它没有按预期工作,可能是由于数据库中的初始数据所致。另外,您可以添加一些调试打印语句来检查初始化方法中的gradeView.getStatus()的初始值,以帮助诊断问题。这里是如何添加调试语句:
System.out.println("Initial gradeView.getStatus(): " + gradeView.getStatus());
这将帮助您验证按钮的初始状态和数据库值是否一致。