リフレッシュを達成するための右クリックメニュー、追加および削除機能 - Javaの戦闘家政婦課金システム(11)

本节概要

このセクションでは、右クリックメニュー機能を通じてCRUDを実装するために話します。

 

リフレッシュコンテキストメニュー

「リフレッシュ」ポップアップメニュー、すなわち初期化メソッドは再びそれを再初期化する方法()初期化と呼ばれ、すべてのデータ・インタフェースを更新します。

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

 

コンテキストメニューを追加します

同じ「追加」ポップアップメニューはシンプルで、ちょうどメニュー項目をクリックした後に追加することができるインターフェースにジャンプ。

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

 

削除コンテキストメニュー

「削除」コンテキストメニューイベント処理、すなわち選択された表の行のデータを取得し、その後deleteRecord動作呼び出しRecordDao.javaを行う記録方法を削除します()。

データ収集ラインがで選択されている "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();
        }
    }
 

 

右クリックメニューを変更します。

あなたは少し難しいのインターフェイスを変更する選択したテーブル行へのデータ転送ので、「修正」、少し難しく達成するために右クリックします。

処理コードコンテキストメニューイベントを修正し、次のとおりです。

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

あなたは、変更機能で実現ロードされたalterAccountFrame.fxmlドキュメントであるコールinitAlterFrame()メソッド、、、ないパラメータを見ることができ、そしてそれは二つのパラメータ、最初のを持っているように、このコードを修正しましたパラメータデータを変更することである、第2のパラメータは、リビジョンがトリガされるかどうかを決定するブール型、またはトリガのメニューバーの修飾コンテキストメニューです。

だから、)(メニューイベントメソッドのalterMenuItemEventを変更し、コードを変更する必要があります。

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

次のようにinitAlterFrameでMainApp.java()メソッドは、コントローラにデータを変更するには、この方法を介して送信される、修飾されました:

    /**
     * 操作结果:更改账目界面
     */
    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;
    }

次いで、データを変更するAlterAccountFrameController.javaで提供される方法に加えました。

    /**
     * 将右键菜单所触发的修改的数据传到修改界面
     *
     * @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()));
    }

プログラム、テスト関数を実行します。

 

 

検索可能な公共のマイクロチャネル番号[ Javaの例のプログラム ]以上の世間の注目を得るためにFanger魏のコード番号をスキャンします。

注: [パブリック数の背景に返信20200331この章のソースコードを入手することができます]。

 

公開された500元の記事 ウォン称賛77 ビュー160 000 +

おすすめ

転載: blog.csdn.net/cnds123321/article/details/104288443