combate el sistema java ama de llaves de facturación (11) - menú del botón derecho para lograr la actualización, adiciones y supresiones de funciones

Esta cláusula general

En esta sección se habla de implementar CRUD a través de la función de menú del botón derecho.

 

menú contextual de actualización

"Actualizar" en el menú emergente, haga clic en Actualizar todas las interfaces de datos, a saber, la inicialización se llama al método initialize () para volver a inicializar de nuevo.

    /**
     * ”刷新“右键菜单的事件监听器
     *
     * @param actionEvent 事件
     */
    public void refreshContextMenuEvent(ActionEvent actionEvent) {
        // 刷新数据
        initialize();
    }

 

Adición de menú contextual

El mismo menú "añadir" pop-up es sencillo, basta con saltar a la interfaz se puede añadir después de hacer clic en el elemento de menú.

    /**
     * “添加”右键菜单的事件监听器
     *
     * @param event 事件
     */
    @FXML
    public void addContextMenuEvent(ActionEvent event) {
        // 跳转到添加界面即可
        mainApp.initAddFrame();
    }

 

Eliminar el menú contextual

"Borrar" manejo de eventos menú de contexto, es decir, para obtener los datos de las filas de la tabla seleccionadas, y luego eliminar el método de grabación de realizar una operación RecordDao.java invocación en deleteRecord ().

línea de adquisición de datos es seleccionado por "getSelectedItem () tableView.getSelectionModel ().".

    /**
     * “删除”右键菜单的事件监听器
     *
     * @param event 事件
     */
    @FXML
    public void deleteContextMenuEvent(ActionEvent event) {
        // 给出提示框提示用户是否选择删除
        boolean b = SimpleTools.informationDialog(Alert.AlertType.CONFIRMATION, "提示", "提示", "请问是否删除?");
        if (b) {
            RecordDao recordDao = new RecordDao();
            // 获取所选择行的索引,从0开始
            int selectedIndex = tableView.getSelectionModel().getSelectedIndex();
            // 获取所选中行是数据
            TableData td = tableView.getSelectionModel().getSelectedItem();
            // 判断是否选中表格行
            if (selectedIndex >= 0) {
                // 删除选中的表格行根据索引
                tableView.getItems().remove(selectedIndex);
                // 执行删除操作
                recordDao.deleteRecord(new Record(Integer.parseInt(td.getId())));
            }
            // 刷新表格数据
            initialize();
        }
    }
 

 

Modificar el menú del botón derecho

"Modificar" Haga clic derecho para conseguir un poco más difícil, ya que la transferencia de datos a la fila de la tabla seleccionada que desea modificar la interfaz un poco difícil.

Modificar el código de manejo de eventos de menú de contexto es el siguiente:

    /**
     * “修改”右键菜单的事件监听器
     *
     * @param event 事件
     */
    @FXML
    public void alterContextMenuEvent(ActionEvent event) {
        // 获取所选中行的数据
        TableData td = tableView.getSelectionModel().getSelectedItem();
        // 设置一个标志,判断是右键菜单触发的修改还是由菜单条上的菜单触发的修改
        boolean isContextMenu = true;
        mainApp.initAlterFrame(td, isContextMenu);
    }

Se puede ver el método (), llamada initAlterFrame que es alterAccountFrame.fxml documento cargado, realizado en la función de modificación, pero no hay parámetros, y esto modificado el código para que tenga dos parámetros, el primero que consiste en modificar los datos de parámetro, el segundo parámetro es un tipo booleano, para determinar si la revisión se activa o un menú de contexto modificado en la barra de menú del gatillo.

Así alterMenuItemEvent método de evento menú Modificar () también resulta necesario modificar el código:

    /**
     * ”修改“菜单项的事件监听器
     *
     * @param actionEvent 事件
     */
    @FXML
    public void alterMenuItemEvent(ActionEvent actionEvent) {
        // 刷新数据
        initialize();
        // 调用修改界面控制器
        mainApp.initAlterFrame(null,false);
    }

Entonces MainApp.java en initAlterFrame () método modificado de la siguiente manera, para ser transmitida a través de este método para modificar los datos al controlador:

    /**
     * 操作结果:更改账目界面
     */
    public Scene initAlterFrame(TableData tableData,boolean isContextMenu) {
        try {
​
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(MainApp.class.getResource("view/alterAccountFrame.fxml"));
            AnchorPane page = (AnchorPane) loader.load();
​
            Stage mainFrameStage = new Stage();
            mainFrameStage.setTitle("更改账目");
            mainFrameStage.setResizable(true);
            mainFrameStage.setAlwaysOnTop(false);
            mainFrameStage.initModality(Modality.APPLICATION_MODAL);
            mainFrameStage.initOwner(primaryStage);
            Scene scene = new Scene(page);
            mainFrameStage.setScene(scene);
​
            // 判断是否由右键菜单触发打开的修改界面,如果是就将要修改的数据传到修改界面
            if(isContextMenu){
                AlterAccountFrameController controller= loader.getController();
                controller.setTableData(tableData);
            }
​
            mainFrameStage.showAndWait();
            return scene;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

Después, se añadió a un método proporcionado en AlterAccountFrameController.java los datos a ser modificados:

    /**
     * 将右键菜单所触发的修改的数据传到修改界面
     *
     * @param tableData 要修改的数据
     */
    public void setTableData(TableData tableData) {
        // 使界面组件可编辑
        inputRadioButton.setDisable(false);
        outputRadioButton.setDisable(false);
        moneyTextField.setDisable(false);
        classificationComboBox.setDisable(false);
        memoTextArea.setDisable(false);
        datePickerText.setDisable(false);
        alterButton.setDisable(false);
​
        // 将要修改的数据填充到各个控件中
        idTextField.setText(tableData.getId());
        if (tableData.getType().equals("支出")) {
            outputRadioButton.setSelected(true);
        } else {
            inputRadioButton.setSelected(true);
        }
        if (outputRadioButton.isSelected()) {
            List<Classification> classificationList = new ClassificationDao().selectByType("支出");
            // 实例化一个一维数组
            String[] classificationNames = new String[classificationList.size()];
            // 将查询得到的分类名称装到一维数组中
            for (int i = 0; i < classificationList.size(); i++) {
                classificationNames[i] = classificationList.get(i).getcName();
            }
            classificationComboBox.setItems(FXCollections.observableArrayList((List) Arrays.asList(classificationNames)));
        }
        if (inputRadioButton.isSelected()) {
            List<Classification> classificationList = new ClassificationDao().selectByType("收入");
            // 实例化一个一维数组
            String[] classificationNames = new String[classificationList.size()];
            // 将查询得到的分类名称装到一维数组中
            for (int i = 0; i < classificationList.size(); i++) {
                classificationNames[i] = classificationList.get(i).getcName();
            }
            classificationComboBox.setItems(FXCollections.observableArrayList((List) Arrays.asList(classificationNames)));
        }
        moneyTextField.setText(tableData.getMoney());
        // 设置分类
        String str = tableData.getClassification();
        int index = 0;
        if (tableData.getType().equals("支出")) {
            List<Classification> classificationList = new ClassificationDao().selectByType("支出");
            // 实例化一个一维数组
            String[] classificationNames = new String[classificationList.size()];
            // 将查询得到的分类名称装到一维数组中
            for (int i = 0; i < classificationList.size(); i++) {
                classificationNames[i] = classificationList.get(i).getcName();
            }
            List outputList = FXCollections.observableArrayList((List) Arrays.asList(classificationNames));
            for (int i = 0; i < outputList.size(); i++) {
                if (str.equals(outputList.get(i))) {
                    index = i;
                }
            }
            //设置选中的分类
            classificationComboBox.getSelectionModel().select(index);
        }
        if (tableData.getType().equals("收入")) {
            List<Classification> classificationList = new ClassificationDao().selectByType("收入");
            // 实例化一个一维数组
            String[] classificationNames = new String[classificationList.size()];
            // 将查询得到的分类名称装到一维数组中
            for (int i = 0; i < classificationList.size(); i++) {
                classificationNames[i] = classificationList.get(i).getcName();
            }
            List inputList = FXCollections.observableArrayList((List) Arrays.asList(classificationNames));
            for (int i = 0; i < inputList.size(); i++) {
                if (str.equals(inputList.get(i))) {
                    index = i;
                }
            }
            // 设置选中的分类
            classificationComboBox.getSelectionModel().select(index);
        }
        memoTextArea.setText(tableData.getMemo());
        datePickerText.setValue(LocalDate.parse(tableData.getDate()));
    }

Ejecutar el programa, la función de prueba:

 

 

número de micro-canales públicos de búsqueda [ programa de ejemplo de Java ] o escanear el código Fanger Wei para obtener más atención del público.

Nota: Responder a [el fondo público número 20200331 ] se puede obtener el código fuente de este capítulo.

 

Publicados 500 artículos originales · ganado elogios 77 · vistas 160 000 +

Supongo que te gusta

Origin blog.csdn.net/cnds123321/article/details/104288443
Recomendado
Clasificación