表格添加自定义回调 2025年3月19日12:26:51

master
qmstyle 2025-03-19 12:27:03 +08:00
parent 7e9e164d91
commit 114181a823
14 changed files with 166 additions and 36 deletions

View File

@ -7,14 +7,19 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.zhangmeng.online.exam.ui.admin.IndexPage;
import com.zhangmeng.online.exam.ui.api.form.RoleForm; import com.zhangmeng.online.exam.ui.api.form.RoleForm;
import com.zhangmeng.online.exam.ui.api.form.UserForm; import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.api.model.*; import com.zhangmeng.online.exam.ui.api.model.*;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
import com.zhangmeng.online.exam.ui.components.callBack.DynamicTableComponentCallBack; import com.zhangmeng.online.exam.ui.components.callBack.DynamicTableComponentCallBack;
import com.zhangmeng.online.exam.ui.layouts.SideMenu; import com.zhangmeng.online.exam.ui.layouts.SideMenu;
import com.zhangmeng.online.exam.ui.utils.HttpUtils; import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleMapProperty; import javafx.beans.property.SimpleMapProperty;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TableView;
import java.util.*; import java.util.*;
@ -101,6 +106,14 @@ public class ApiUtils {
return dataLoad.loadData(PAGE_NUM,PAGE_SIZE); return dataLoad.loadData(PAGE_NUM,PAGE_SIZE);
} }
public static Map<String, SimpleStringProperty> selectedItem(MenuItem menuItem){
ContextMenu parentPopup = menuItem.getParentPopup();
IndexPage indexPage = (IndexPage)parentPopup.getStyleableParent();
DynamicTableComponent center = (DynamicTableComponent)indexPage.getCenter();
TableView<Map<String, SimpleStringProperty>> tableView = center.getTableView();
return tableView.getSelectionModel().getSelectedItem();
}
public static class DataView { public static class DataView {
private List<String> keys; private List<String> keys;

View File

@ -2,8 +2,10 @@ package com.zhangmeng.online.exam.ui.api;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -27,4 +29,6 @@ public interface DataLoad {
public void editData(String s, Stage stage); public void editData(String s, Stage stage);
public void updateData(String id, String name, String oldValue, String newValue); public void updateData(String id, String name, String oldValue, String newValue);
List<MenuItem> getContextMenu();
} }

View File

@ -10,6 +10,7 @@ import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils; import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.util.*; import java.util.*;
@ -128,4 +129,9 @@ public class AnswerDataLoad implements DataLoad {
} }
} }
@Override
public List<MenuItem> getContextMenu() {
return null;
}
} }

View File

@ -10,6 +10,7 @@ import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils; import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.util.*; import java.util.*;
@ -110,4 +111,9 @@ public class OptionDataLoad implements DataLoad {
public void updateData(String id, String name, String oldValue, String newValue) { public void updateData(String id, String name, String oldValue, String newValue) {
} }
@Override
public List<MenuItem> getContextMenu() {
return null;
}
} }

View File

@ -3,13 +3,20 @@ package com.zhangmeng.online.exam.ui.api.model;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.zhangmeng.online.exam.ui.admin.IndexPage;
import com.zhangmeng.online.exam.ui.api.ApiUtils; import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad; import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.api.form.UserForm; import com.zhangmeng.online.exam.ui.api.form.UserForm;
import com.zhangmeng.online.exam.ui.components.DynamicTableComponent;
import com.zhangmeng.online.exam.ui.utils.AlertUtils; import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils; import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.css.Styleable;
import javafx.scene.Node;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.TableView;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.util.*; import java.util.*;
@ -34,23 +41,21 @@ public class PaperDataLoad implements DataLoad {
int total = jsonObject.getIntValue("total"); int total = jsonObject.getIntValue("total");
List<Map<String, SimpleStringProperty>> userMapList = new ArrayList<>(); List<Map<String, SimpleStringProperty>> userMapList = new ArrayList<>();
for (Object datum : data) { for (Object datum : data) {
JSONObject user = (JSONObject) datum; JSONObject paper = (JSONObject) datum;
Map<String, SimpleStringProperty> userMap = new HashMap<>(); Map<String, SimpleStringProperty> userMap = new HashMap<>();
userMap.put("序号", new SimpleStringProperty(user.getString("id"))); userMap.put("序号", new SimpleStringProperty(paper.getString("id")));
userMap.put("用户名", new SimpleStringProperty(user.getString("username"))); userMap.put("试卷名称", new SimpleStringProperty(paper.getString("name")));
userMap.put("手机号码", new SimpleStringProperty(user.getString("phone"))); userMap.put("创建人", new SimpleStringProperty(paper.getString("creator_username")));
userMap.put("电子邮箱", new SimpleStringProperty(user.getString("email"))); userMap.put("学科名称", new SimpleStringProperty(paper.getString("subject_name")));
userMap.put("总分", new SimpleStringProperty(paper.getString("totalScore")));
userMap.put("用户名_username", new SimpleStringProperty(user.getString("username"))); userMap.put("考试时间", new SimpleStringProperty(paper.getString("examTime")));
userMap.put("手机号码_phone", new SimpleStringProperty(user.getString("phone"))); userMap.put("id", new SimpleStringProperty(paper.getString("id")));
userMap.put("电子邮箱_email", new SimpleStringProperty(user.getString("email")));
userMap.put("id", new SimpleStringProperty(user.getString("id")));
userMapList.add(userMap); userMapList.add(userMap);
} }
ApiUtils.DataView dataView = new ApiUtils.DataView(Arrays.asList("序号", "用户名","手机号码", "电子邮箱" ), userMapList).setDataLoad(this).setPageNum(pageNum).setPageSize(pageSize).setTotal(total); ApiUtils.DataView dataView = new ApiUtils.DataView(Arrays.asList("序号", "试卷名称", "创建人", "学科名称", "总分", "考试时间"), userMapList).setDataLoad(this).setPageNum(pageNum).setPageSize(pageSize).setTotal(total);
dataView.setDataLoad(this); dataView.setDataLoad(this);
return dataView; return dataView;
} }
@ -128,4 +133,18 @@ public class PaperDataLoad implements DataLoad {
} }
} }
@Override
public List<MenuItem> getContextMenu() {
MenuItem group_volumes = new MenuItem("组卷");
group_volumes.setOnAction(event -> {
Map<String, SimpleStringProperty> map = ApiUtils.selectedItem(group_volumes);
String id = map.get("id").getValue();
AlertUtils.alert_msg("组卷正在开发中..." + id);
});
return Arrays.asList(group_volumes);
}
} }

View File

@ -8,6 +8,7 @@ import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.utils.HttpUtils; import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.util.*; import java.util.*;
@ -73,4 +74,9 @@ public class PermissionDataLoad implements DataLoad {
public void updateData(String id, String name, String oldValue, String newValue) { public void updateData(String id, String name, String oldValue, String newValue) {
} }
@Override
public List<MenuItem> getContextMenu() {
return null;
}
} }

View File

@ -8,6 +8,7 @@ import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.utils.HttpUtils; import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.util.*; import java.util.*;
@ -73,4 +74,10 @@ public class QuestionDataLoad implements DataLoad {
public void updateData(String id, String name, String oldValue, String newValue) { public void updateData(String id, String name, String oldValue, String newValue) {
} }
@Override
public List<MenuItem> getContextMenu() {
return null;
}
} }

View File

@ -10,6 +10,7 @@ import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils; import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.util.*; import java.util.*;
@ -110,4 +111,9 @@ public class QuestionOptionDataLoad implements DataLoad {
public void updateData(String id, String name, String oldValue, String newValue) { public void updateData(String id, String name, String oldValue, String newValue) {
} }
@Override
public List<MenuItem> getContextMenu() {
return null;
}
} }

View File

@ -8,6 +8,7 @@ import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.utils.HttpUtils; import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.util.*; import java.util.*;
@ -74,4 +75,9 @@ public class RoleDataLoad implements DataLoad {
public void updateData(String id, String name, String oldValue, String newValue) { public void updateData(String id, String name, String oldValue, String newValue) {
} }
@Override
public List<MenuItem> getContextMenu() {
return null;
}
} }

View File

@ -10,6 +10,7 @@ import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import com.zhangmeng.online.exam.ui.utils.HttpUtils; import com.zhangmeng.online.exam.ui.utils.HttpUtils;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.util.*; import java.util.*;
@ -109,4 +110,9 @@ public class SubjectDataLoad implements DataLoad {
public void updateData(String id, String name, String oldValue, String newValue) { public void updateData(String id, String name, String oldValue, String newValue) {
} }
@Override
public List<MenuItem> getContextMenu() {
return null;
}
} }

View File

@ -13,6 +13,7 @@ import java.util.*;
import com.zhangmeng.online.exam.ui.api.ApiUtils; import com.zhangmeng.online.exam.ui.api.ApiUtils;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.MenuItem;
import javafx.stage.Stage; import javafx.stage.Stage;
/** /**
@ -129,4 +130,13 @@ public class UserDataLoad implements DataLoad {
} }
} }
@Override
public List<MenuItem> getContextMenu() {
return null;
}
} }

View File

@ -1,6 +1,7 @@
package com.zhangmeng.online.exam.ui.components; package com.zhangmeng.online.exam.ui.components;
import com.zhangmeng.online.exam.ui.api.ApiUtils; import com.zhangmeng.online.exam.ui.api.ApiUtils;
import com.zhangmeng.online.exam.ui.api.DataLoad;
import com.zhangmeng.online.exam.ui.components.callBack.DynamicTableComponentCallBack; import com.zhangmeng.online.exam.ui.components.callBack.DynamicTableComponentCallBack;
import com.zhangmeng.online.exam.ui.utils.AlertUtils; import com.zhangmeng.online.exam.ui.utils.AlertUtils;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
@ -35,6 +36,26 @@ public class DynamicTableComponent extends VBox {
private DynamicTableComponentCallBack callBack; private DynamicTableComponentCallBack callBack;
private TableView<Map<String, SimpleStringProperty>> tableView;
public TableView<Map<String, SimpleStringProperty>> getTableView() {
return tableView;
}
public void setTableView(TableView<Map<String, SimpleStringProperty>> tableView) {
this.tableView = tableView;
}
private DataLoad dataLoad;
public DataLoad getDataLoad() {
return dataLoad;
}
public void setDataLoad(DataLoad dataLoad) {
this.dataLoad = dataLoad;
}
public DynamicTableComponentCallBack getCallBack() { public DynamicTableComponentCallBack getCallBack() {
return callBack; return callBack;
} }
@ -52,9 +73,10 @@ public class DynamicTableComponent extends VBox {
// public DynamicTableComponent(List<Map<String, SimpleStringProperty>> dataList,List<String> keys) { // public DynamicTableComponent(List<Map<String, SimpleStringProperty>> dataList,List<String> keys) {
public DynamicTableComponent(ApiUtils.DataView dataView) { public DynamicTableComponent(ApiUtils.DataView dataView) {
super(); super();
this.dataLoad = dataView.getDataLoad();
List<Map<String, SimpleStringProperty>> dataList = dataView.getDataList(); List<Map<String, SimpleStringProperty>> dataList = dataView.getDataList();
List<String> keys = dataView.getKeys(); List<String> keys = dataView.getKeys();
TableView<Map<String, SimpleStringProperty>> tableView = new TableView<>(); tableView = new TableView<>();
tableView.setItems(data); tableView.setItems(data);
tableView.setEditable(true); tableView.setEditable(true);
tableView.prefHeightProperty().bind(this.heightProperty()); tableView.prefHeightProperty().bind(this.heightProperty());
@ -135,6 +157,10 @@ public class DynamicTableComponent extends VBox {
data.remove(tableView.getSelectionModel().getSelectedItem()); data.remove(tableView.getSelectionModel().getSelectedItem());
} }
}); });
if (dataLoad.getContextMenu() != null && !dataLoad.getContextMenu().isEmpty()){
contextMenu.getItems().addAll(dataLoad.getContextMenu());
}
contextMenu.getItems().addAll(editItem, deleteItem); contextMenu.getItems().addAll(editItem, deleteItem);
tableView.setContextMenu(contextMenu); tableView.setContextMenu(contextMenu);
tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);//允许一次选择一个或多个连续的索引范围。 tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);//允许一次选择一个或多个连续的索引范围。

View File

@ -0,0 +1,15 @@
package com.zhangmeng.online.exam.ui.components;
/**
*
*
* @author zm
* @date 2025/3/19 12:22
* @version: 1.0
*/
public class PaperViewComponent {
}

View File

@ -132,7 +132,7 @@ public class SideMenu extends VBox {
case "/subject/list" -> init_table(hbox, ApiUtils.getSubjectList()); case "/subject/list" -> init_table(hbox, ApiUtils.getSubjectList());
case "/option/list" -> init_table(hbox, ApiUtils.getQuestionOptionList()); case "/option/list" -> init_table(hbox, ApiUtils.getQuestionOptionList());
case "/answer/list" -> init_table(hbox, ApiUtils.getAnswerList()); case "/answer/list" -> init_table(hbox, ApiUtils.getAnswerList());
case "/exam/paper" -> init_table(hbox, ApiUtils.getExamPaper()); case "/paper/list" -> init_table(hbox, ApiUtils.getExamPaper());
} }
}); });