本节概要
このセクションでは、右クリックメニュー機能を通じて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この章のソースコードを入手することができます]。