我为我的组件上的每个更新操作创建了单独的存储过程。
以下是存储过程:
updateCurriculumName() --call only if name was changed
updateCurriculumYearLevel() --call only if year level was changed
updateCurriculumSchoolYear() -- call only if school year was changed
updateCurriculumDescription() -- call only if description was changed
updateCurriculumSubjects() -- call only if there are changes made on assigned subjects
我需要能够通知SAVE
按钮,以便知道哪个组件被修改/更改,以便知道要调用哪个过程而不是调用所有过程。
例如,如果仅更改课程名称,则应仅调用updateCurriculumName()
程序。
注意如果对JTextField或JComboBox或JTextArea进行了更改,我会使用*
标记JLabel的文本。
我目前有,
DocumentListener
课程名称 JTextField
(添加了*
)
ItemStateChangedListener
年级 JComboBox
(也添加了*
)
ItemStateChangedListener
学年 JComboBox
(同时添加*
)
如何告诉SAVE按钮的actionPerformed
说明只能呼叫""状态/值发生变化的组件的存储过程?
像,
private void SaveJbtnActionPerformed(java.awt.event.ActionEvent evt) {
if(yearlevel was changed)
call updateYearLevel()
else if(curriculumName was changed)
call updateCurriculumName()
else if(schoolyear was changed)
call updateCurriculumSchoolYear()
}
我很欣赏任何建议或建议什么方法最好。
提前致谢。
答案 0 :(得分:0)
有一些选项可以这样做:
将监听器添加到按钮,并为每个过程添加布尔值:
mSaveBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (updateName) {
updatename();
}
if (updateYearLevel) {
updateYearLevel();
}
...
}
});
您可以创建自定义save
按钮,并在按钮触发时将布尔值传递给按钮:
public class SaveBtn extends JButton {
public SaveBtn(final boolean updateName, final boolean
updateYearLevel...) {
if (updateName) {
updatename();
}
if (updateYearLevel) {
updateYearLevel();
}
...
}
}
答案 1 :(得分:0)
我会为视图的每个相关分区或整个视图本身创建一个对象。将所有相关变量与相关的getter和setter放在一起。
例如:
class ViewObject{
private String curriculumName;
public void setCurriculumName(String curriculumName){...}
public String getCurriculumName(){...}
//...and so on
}
将此对象用作控制器/模型和视图之间的传输对象。因此,例如,在加载/创建视图时,加载包含数据的初始版本或空的(取决于用例)。之后,用户修改视图中的字段,当用户单击“保存”时,将视图的值放入其中并将其传递给保存/处理组件。 如果知道确切改变了什么比创建一个新的更重要,请在保存点击时保存视图数据并将其与初始数据进行比较。
我确信这种方法会大大降低程序的复杂性,并且可以避免将来与视图和逻辑之间紧密绑定相关的麻烦,因此视图和控制器。