簡體   English   中英

在 Javafx 中更新或刪除后如何刷新數據庫表視圖?

[英]How to refresh database tableview after updating or Deleting In Javafx?

我有兩個 Controller 類(控制器和 Dailog 控制器)。 COntroller class 有tableView。 雙擊 Tableview 行,彈出對話框。 dialogController class 有兩個按鈕,即更新和刪除。 更新按鈕更新和刪除數據庫中的數據。 更新或刪除后,我想刷新 tableview。 問題是 tablview 刷新方法在 Controller class 中。 那么我該如何刷新呢?

    public class Controller implements Initializable{



    @FXML
    private TabPane tabPane;

     @FXML
     private Tab createTaskTab;

     @FXML
     private TextArea textArea;

     @FXML
     private Button saveBtn;

     @FXML
     private Tab viewTasksTab;

    @FXML
    private TableView<Task> tableView;

    @FXML
    private TableColumn<Task, Integer> idColumn;

    @FXML
    private TableColumn<Task, String> dateColumn;

    @FXML
    private TableColumn<Task, String> timeColumn;

    @FXML
    private TableColumn<Task, String> taskColumn;

    @FXML
    private TableColumn<Task, String> statusColumn;


    @FXML
    void saveTask(ActionEvent event) {

        String getTask = textArea.getText();

        if(getTask.length() > 0)
        {
            MysqlConnection mysqlConnection = new MysqlConnection();
            int count = mysqlConnection.insertTask(getTask);
            if(count > 0)
            {
                Alert alert = new Alert(AlertType.INFORMATION);
                alert.setTitle("Saved");
                alert.setContentText("Task Saved");
                alert.show();
                textArea.clear();
            }
        }
        else
        {
            Alert alert = new Alert(AlertType.WARNING);
            alert.setTitle("Empty TextArea");
            alert.setContentText("Please write the task");
            alert.show();
        }
    }

    @FXML
    public void viewTasks(Event e)
    {
        try{

            tabPane.getSelectionModel().selectedItemProperty().addListener(
                    new ChangeListener<Tab>() {

                        @Override
                        public void changed(ObservableValue<? extends Tab> observable, Tab oldValue, Tab newValue) {

                            if(newValue == viewTasksTab)
                            {

                                refreshTable();
                            }

                        }
                    });

        }catch(Exception exception)
        {
            System.out.println("Exception in viewTasks");
        }

    }

    protected void refreshTable() {

        MysqlConnection myconn = new MysqlConnection();
        idColumn.setCellValueFactory(new PropertyValueFactory<>("id"));
        dateColumn.setCellValueFactory(new PropertyValueFactory<>("date"));
        timeColumn.setCellValueFactory(new PropertyValueFactory<>("time"));
        taskColumn.setCellValueFactory(new PropertyValueFactory<>("task"));
        statusColumn.setCellValueFactory(new PropertyValueFactory<>("status"));
        tableView.setItems(myconn.fetchTasks());
    }

    @FXML
    public void onEdit(MouseEvent event)
    {
        if(event.getClickCount() == 2){

            Task selectedTask = tableView.getSelectionModel().getSelectedItem();
            Scene scene;
            Stage stage;
            try {
                FXMLLoader loader = new FXMLLoader(getClass().getResource("DialogBox.fxml"));
                Parent root = (Parent) loader.load();
                DialogBoxController dialog = loader.getController();
                dialog.editTask(selectedTask);
                scene = new Scene(root);
                stage = new Stage();
                stage.initModality(Modality.APPLICATION_MODAL);
                stage.setScene(scene);
                stage.showAndWait();

            } catch (IOException e) {

                System.out.println("Exception in onEdit"+e.getMessage());
            }
        }
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {


    }



}

對話控制器 class:

[public class DialogBoxController implements Initializable{


@FXML
private Label idLabel;

@FXML
private Label dateLabel;

@FXML
private Label timeLabel;

@FXML
private ComboBox<String> statusComboBox;

@FXML
private TextArea textAreaDialog;

@FXML
private Button updateBtn;

@FXML
private Button deleteBtn;



private void closeStage(ActionEvent event) {

    Node source = (Node) event.getSource();
    Stage stage = (Stage) source.getScene().getWindow();
    stage.close();
}

public void editTask(Task task)
{

    idLabel.setText(""+task.getId());
    dateLabel.setText(task.getDate());
    timeLabel.setText(task.getTime());
    textAreaDialog.setText(task.getTask());
    statusComboBox.setValue(task.getStatus());
    textAreaDialog.setEditable(false);
}

@FXML
public void update(ActionEvent event){

    int taskID = Integer.parseInt(idLabel.getText());
    String status = statusComboBox.getSelectionModel().getSelectedItem().toString();
    MysqlConnection myconn = new MysqlConnection();
    myconn.updateTask(taskID, status);
    closeStage(event);
}

@FXML
public void delete(ActionEvent event){

    int taskID = Integer.parseInt(idLabel.getText());
    MysqlConnection myconn = new MysqlConnection();
    myconn.deleteTask(taskID);
    closeStage(event);

}

@Override
public void initialize(URL location, ResourceBundle resources) {

    statusComboBox.getItems().addAll("Pending","Done","Aborted");


}

應用程序快照

您可以將其添加到 DialogBoxController class:

public class DialogBoxController {
private Controller controller;
public void setController(Controller controller){
    this.controller = controller;
}
@FXML
public void delete(ActionEvent event){

    // Your code
    controller.refreshTable();
    closeStage(event);

}}

在 Controller 中:

DialogBoxController dialog = loader.getController();
    dialog.editTask(selectedTask);
    dialog.setController(this);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM