java - 在Javafx中更新或删除后如何刷新数据库 TableView ?

标签 java javafx-8

我有两个 Controller 类( Controller 和Dailog Controller )。 CONtroller 类有 tableView。双击 Tableview 行会弹出对话框。 dialogController 类有两个按钮,即更新和删除。 更新按钮更新和删除数据库中的数据。更新或删除后我想刷新表格 View 。问题是 tablview 刷新方法位于 Controller 类中。那么如何刷新呢?

    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) {


    }



}

DialogController类:

[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");


}

Snapcshot of Application

最佳答案

您可以将其添加到 DialogBoxController 类中:

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);

关于java - 在Javafx中更新或删除后如何刷新数据库 TableView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61475471/

相关文章:

java - Cucumber框架创建

私有(private)字段的 Scala 名称修改和 JavaFX FXML 注入(inject)

java - 在 JavaFX 任务中创建 JavaFX 对话框

java - Amazon AWA - 未发现类 Def 异常

java - SwingFXUtils 图像序列化替代方案(Javafx、Swing、Raspberry Pi)

java - Sprite 是在背景下绘制的

JavaFX TreeView 在 Java 8 中不工作

java - AndroidcardView点击回调

java - JavaFX 中带有滑动行标题的表格控件

java - ReactFX - "lazy"实时搜索文本区域