通知 JButton 以了解更改的内容
Posted
技术标签:
【中文标题】通知 JButton 以了解更改的内容【英文标题】:Notify a JButton to know which was changed 【发布时间】:2016-06-26 06:54:10 【问题描述】:我为组件上的每个更新操作创建了单独的存储过程。
这里是存储过程:
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()
如果您有任何关于哪种方法最好的建议或建议,我将不胜感激。
提前致谢。
【问题讨论】:
一种方法是为每个过程存储一个布尔值。当对应的数据发生变化时,将其改为true
。单击按钮时,只执行xDataChanged
为true
的程序。
【参考方案1】:
有一些选项可以这样做:
为按钮添加监听器,并为每个过程添加布尔值:
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();
...
【讨论】:
【参考方案2】:我会为视图的每个相关分区或整个视图本身创建一个对象。将所有相关变量以及相关的 getter 和 setter 放入其中。
例如:
class ViewObject
private String curriculumName;
public void setCurriculumName(String curriculumName)...
public String getCurriculumName()...
//...and so on
将此对象用作控制器/模型和视图之间的传输对象。因此,例如在加载/创建视图时加载包含数据的初始版本或空版本(取决于用例)。之后,用户修改视图中的字段,当用户单击保存时,将视图的值放入其中并将其传递给保存/处理组件。 如果知道确切更改的内容比创建一个新的更重要,请在单击保存时保存视图数据并将其与初始数据进行比较。
我确信这种方法会大大降低您的程序的复杂性,并且它将使您免于未来与视图和逻辑之间紧密绑定相关的麻烦,因此视图和控制器。
【讨论】:
以上是关于通知 JButton 以了解更改的内容的主要内容,如果未能解决你的问题,请参考以下文章