通知JButton知道哪些更改了

时间:2016-06-26 06:54:10

标签: java swing jdbc actionlistener

我为我的组件上的每个更新操作创建了单独的存储过程。

以下是存储过程:

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() 

}

enter image description here

我很欣赏任何建议或建议什么方法最好。

提前致谢。

2 个答案:

答案 0 :(得分:0)

有一些选项可以这样做:

  1. 将监听器添加到按钮,并为每个过程添加布尔值:

    mSaveBtn.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (updateName) {
                updatename();
            }
    
            if (updateYearLevel) {
                 updateYearLevel();
            }
    
            ...
        }
    });
    
  2. 您可以创建自定义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
}

将此对象用作控制器/模型和视图之间的传输对象。因此,例如,在加载/创建视图时,加载包含数据的初始版本或空的(取决于用例)。之后,用户修改视图中的字段,当用户单击“保存”时,将视图的值放入其中并将其传递给保存/处理组件。 如果知道确切改变了什么比创建一个新的更重要,请在保存点击时保存视图数据并将其与初始数据进行比较。

我确信这种方法会大大降低程序的复杂性,并且可以避免将来与视图和逻辑之间紧密绑定相关的麻烦,因此视图和控制器。