JAVAFX: 在更新了新数据后,从数据库自动重新加载标签数据

huangapple 未分类评论53阅读模式
英文:

JAVAFX: reload label data automatically from database after updating with new data

问题

HomepageController:

package homepage;

import datasource.BudgetData;
import datasource.DbConnect;
// ... (other imports)

public class HomepageController implements Initializable {

    // ... (FXML definitions)

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        loadBudgetData();
    }

    @FXML
    void handleEditBudget(ActionEvent event) {
        // ... (handleEditBudget code)
    }

    public void loadBudgetData() {
        // ... (loadBudgetData code)
    }
}

editBudgetController:

package homepage;

import datasource.DbConnect;
// ... (other imports)

public class editBudgetController implements Initializable {

    // ... (FXML definitions)

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        showTotals();
    }

    @FXML
    void handleClearButton() {
        // ... (handleClearButton code)
    }

    @FXML
    void handlePostButton(ActionEvent event) {
        // ... (handlePostButton code)
    }

    @FXML
    public void showTotals() {
        // ... (showTotals code)
    }

    @FXML
    public void updateBudget() {
        // ... (updateBudget code)
    }
}

Note: The provided code snippets have been translated to Chinese. If you have any specific questions or need further assistance, please let me know.

英文:

I have two FXML pages each with its controller. The main one (homepage.fxml) reads budget items from a database. It has an edit button which opens the secondary FXML file (editBudget.fxml) with its own controller. In the secondary FXML, you can enter new budget values that update the database.

If I update the values and then restart the program the main FXML file opens with the new values but I would like it to update as soon as I press post on the second FXML file.

HomepageController

package homepage;

import datasource.BudgetData;
import datasource.DbConnect;
import java.io.IOException;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import java.net.URL;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class HomepageController implements Initializable {

    @FXML
    private Label dateDashboard;

    @FXML
    private Label cashDashboard;

    @FXML
    private Label bankDashboard;

    @FXML
    private Label mobileMoneyDashboard;

    @FXML
    private Label totalAssetsDashboard;

    @FXML
    private Label budgetedDashboard;

    @FXML
    private Label bCoverDashboard;
    
    @FXML
    private Label budgetCoverperDashboard;

    @FXML
    private DatePicker datepicker;

    @FXML
    private TextField cashfield;

    @FXML
    private TextField mpesafield;

    @FXML
    private TextField bankfield;

    @FXML
    private Button postbutton;


    @FXML
    private MenuItem deleteMenuItem;

    @FXML
    private Label rentBudget;

    @FXML
    private Label deductionsBudget;

    @FXML
    private Label garbageBudget;

    @FXML
    private Label electricityBudget;

    @FXML
    private Label gasBudget;

    @FXML
    private Label entBudget;

    @FXML
    private Label shoppingBudget;

    @FXML
    private Label airtimeBudget;

    @FXML
    private Label tvBudget;

    @FXML
    private Label transportBudget;

    @FXML
    private Label foodBudget;
    
    @FXML
    private Label budgetTotalSet;

    private ObservableList<BudgetData> budgetDataObservableList;

    DbConnect dbConnect = DbConnect.getInstance();
    
    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {

        loadBudgetData();
    }

    @FXML
    void handleEditBudget(ActionEvent event) {
        

        try {
            
            AnchorPane parent = (AnchorPane) 
 FXMLLoader.load(getClass().getResource("editBudget.fxml"));
            Stage stage = new Stage();
            stage.setScene(new Scene(parent));
            stage.setTitle("Update Budget");
            stage.setResizable(false);
            stage.show();
           
            
        } catch (IOException ex) {
            Logger.getLogger(HomepageController.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("handleEditBudget(): " + ex.getMessage());
        }
    }
    
    
    public void loadBudgetData() {
        
        try {
            Connection connection = dbConnect.getConnection();
            String sqlselect = "SELECT * FROM budget WHERE ROWID = (SELECT max(ROWID) from budget)";
            System.out.println(sqlselect);
            ResultSet resultSet = connection.createStatement().executeQuery(sqlselect);

            budgetDataObservableList = FXCollections.observableArrayList();
            while (resultSet.next()) {

                budgetDataObservableList.add(new BudgetData(resultSet.getString(1),
                        resultSet.getString(2), resultSet.getString(3),
                        resultSet.getString(4), resultSet.getString(5), resultSet.getString(6),
                resultSet.getString(7), resultSet.getString(8), resultSet.getString(9), 
                resultSet.getString(10), resultSet.getString(11)));
            }

            connection.close();
        } catch (SQLException e) {

            System.out.println("loadBudgetData(): " + e.getMessage());
        }
        
        int IntRent = Integer.parseInt(budgetDataObservableList.get(0).getRent());
        int intDeductions = Integer.parseInt(budgetDataObservableList.get(0).getDeductions());
        int intGarbage = Integer.parseInt(budgetDataObservableList.get(0).getGarbage());
        var intElectricity = Integer.parseInt(budgetDataObservableList.get(0).getElectricity());
        int intGas = Integer.parseInt(budgetDataObservableList.get(0).getGas());
        int intShopping = Integer.parseInt(budgetDataObservableList.get(0).getShopping());
        int intAirtime = Integer.parseInt(budgetDataObservableList.get(0).getAirtime());
        int intTv = Integer.parseInt(budgetDataObservableList.get(0).getTv());
        int intTransport = Integer.parseInt(budgetDataObservableList.get(0).getTransport());
        int intFood = Integer.parseInt(budgetDataObservableList.get(0).getFood());
        int intEntertainment = Integer.parseInt(budgetDataObservableList.get(0).getEntertainment());
        
        int intTotal = IntRent + intDeductions + intGarbage + intElectricity + intGas + intShopping + intAirtime + intTv + intTransport + intFood + intEntertainment;
        String stringTotal = Integer.toString(intTotal);
        
       
        
        try {
            
           rentBudget.setText(budgetDataObservableList.get(0).getRent());
           deductionsBudget.setText(budgetDataObservableList.get(0).getDeductions());
           garbageBudget.setText(budgetDataObservableList.get(0).getGarbage());
           electricityBudget.setText(budgetDataObservableList.get(0).getElectricity());
           gasBudget.setText(budgetDataObservableList.get(0).getGas());
           shoppingBudget.setText(budgetDataObservableList.get(0).getShopping());
           airtimeBudget.setText(budgetDataObservableList.get(0).getAirtime());
           tvBudget.setText(budgetDataObservableList.get(0).getTv());
           transportBudget.setText(budgetDataObservableList.get(0).getTransport());
           foodBudget.setText(budgetDataObservableList.get(0).getFood());
           entBudget.setText(budgetDataObservableList.get(0).getEntertainment());
            
        } catch (Exception e) {

            System.out.println("setcellvalue: " + e.getMessage());
        }
    }
}

editbudgetcontroller

package homepage;

import datasource.DbConnect;

import java.net.URL;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ResourceBundle;
import javafx.beans.binding.Bindings;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Alert;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.util.StringConverter;
import javafx.util.converter.DoubleStringConverter;

public class editBudgetController implements Initializable {

    @FXML
    private TextField editRent;

    @FXML
    private TextField editDeductions;

    @FXML
    private TextField editGarbage;

    @FXML
    private TextField editElectricity;

    @FXML
    private TextField editGas;

    @FXML
    private TextField editShopping;

    @FXML
    private TextField editAirtime;

    @FXML
    private TextField editTv;

    @FXML
    private TextField editTransport;

    @FXML
    private TextField editFood;

    @FXML
    private TextField editEntertainment;

    @FXML
    private Label totalLabel;
    DbConnect dbConnect;
    
    @FXML
    private HomepageController homepageController;

    @Override
    public void initialize(URL url, ResourceBundle rb) {

        showTotals();
    }
    

    @FXML
    void handleClearButton() {

        this.editRent.setText(null);
        this.editDeductions.setText(null);
        this.editGarbage.setText(null);
        this.editElectricity.setText(null);
        this.editGas.setText(null);
        this.editShopping.setText(null);
        this.editAirtime.setText(null);
        this.editTv.setText(null);
        this.editTransport.setText(null);
        this.editFood.setText(null);
        this.editEntertainment.setText(null);
    }

    @FXML
    void handlePostButton(ActionEvent event) {

        updateBudget();
        handleClearButton();
    }

    @FXML
    public void showTotals() {

        DoubleProperty rent = new SimpleDoubleProperty();
        DoubleProperty deductions = new SimpleDoubleProperty();
        DoubleProperty garbage = new SimpleDoubleProperty();
        DoubleProperty electricity = new SimpleDoubleProperty();
        DoubleProperty gas = new SimpleDoubleProperty();
        DoubleProperty shopping = new SimpleDoubleProperty();
        DoubleProperty airtime = new SimpleDoubleProperty();
        DoubleProperty tv = new SimpleDoubleProperty();
        DoubleProperty transport = new SimpleDoubleProperty();
        DoubleProperty food = new SimpleDoubleProperty();
        DoubleProperty entertainment = new SimpleDoubleProperty();
        DoubleProperty total = new SimpleDoubleProperty();

        // can also use (add(rent, garbage))
        total.bind(rent.add(deductions.add(garbage.add(electricity.add(gas.add(shopping.add(airtime.add(tv.add(transport.add(food.add(entertainment)))))))))));

        StringConverter<? extends Number> stringConverter = new DoubleStringConverter();

        Bindings.bindBidirectional(editRent.textProperty(), rent, (StringConverter<Number>) stringConverter);
        Bindings.bindBidirectional(editDeductions.textProperty(), deductions, (StringConverter<Number>) stringConverter);
        Bindings.bindBidirectional(editGarbage.textProperty(), garbage, (StringConverter<Number>) stringConverter);
        Bindings.bindBidirectional(editElectricity.textProperty(), electricity, (StringConverter<Number>) stringConverter);
        Bindings.bindBidirectional(editGas.textProperty(), gas, (StringConverter<Number>) stringConverter);
        Bindings.bindBidirectional(editShopping.textProperty(), shopping, (StringConverter<Number>) stringConverter);
        Bindings.bindBidirectional(editAirtime.textProperty(), airtime, (StringConverter<Number>) stringConverter);
        Bindings.bindBidirectional(editTv.textProperty(), tv, (StringConverter<Number>) stringConverter);
        Bindings.bindBidirectional(editTransport.textProperty(), transport, (StringConverter<Number>) stringConverter);
        Bindings.bindBidirectional(editFood.textProperty(), food, (StringConverter<Number>) stringConverter);
        Bindings.bindBidirectional(editEntertainment.textProperty(), entertainment, (StringConverter<Number>) stringConverter);

        // BInd total
        totalLabel.textProperty().bind(total.asString());

    }

    @FXML
    public void updateBudget() {

        String sqlinsert = "INSERT INTO budget(rent, deductions, garbage, electricity, gas, shopping, airtime, tv, transport, food, entertainment) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

        try {

            Connection connection = dbConnect.getConnection();
            PreparedStatement insertPreparedStatement = connection.prepareStatement(sqlinsert);
            insertPreparedStatement.setString(1, this.editRent.getText());
            insertPreparedStatement.setString(2, this.editDeductions.getText());
            insertPreparedStatement.setString(3, this.editGarbage.getText());
            insertPreparedStatement.setString(4, this.editElectricity.getText());
            insertPreparedStatement.setString(5, this.editGas.getText());
            insertPreparedStatement.setString(6, this.editShopping.getText());
            insertPreparedStatement.setString(7, this.editAirtime.getText());
            insertPreparedStatement.setString(8, this.editTv.getText());
            insertPreparedStatement.setString(9, this.editTransport.getText());
            insertPreparedStatement.setString(10, this.editFood.getText());
            insertPreparedStatement.setString(11, this.editEntertainment.getText());

            insertPreparedStatement.execute();

            this.editRent.setText(null);
            this.editDeductions.setText(null);
            this.editGarbage.setText(null);
            this.editElectricity.setText(null);
            this.editGas.setText(null);
            this.editShopping.setText(null);
            this.editAirtime.setText(null);
            this.editTv.setText(null);
            this.editTransport.setText(null);
            this.editFood.setText(null);
            this.editEntertainment.setText(null);
            
            Alert alert = new Alert(Alert.AlertType.INFORMATION);
            alert.setHeaderText("Success!!");
            alert.showAndWait();
            
            connection.close();

        } catch (SQLException e) {

            System.out.println("updateBudget() " + e.getMessage());

        }
    }
}

In case you would like to run it github

huangapple
  • 本文由 发表于 2020年4月10日 20:17:49
  • 转载请务必保留本文链接:https://java.coder-hub.com/61140076.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定