如何避免在多用户环境中编辑表单中的相同值?

时间:2010-12-06 12:55:17

标签: java swing multi-user

我的环境:包含服务器和客户端的多用户应用程序。服务器知道当前正在使用哪个字段,并且无法从其他用户进行编辑。

我有一个包含多个JComponents的表单,如JCheckBox,JTextField,JTextArea和JComboBox。问题是我想控制是否允许用户编辑字段的值。如果不允许用户编辑该字段,则不允许该组件进入编辑模式。

例如: 用户A正在编辑文本字段的值。 现在用户B想要编辑相同的值。他点击了同一个文本字段,此时我想确保文本字段没有在编辑模式下切换。

有人知道这张支票的正确位置吗?我是否必须在每个组件中实施检查,或者是否有适合我表单中所有JComponents的解决方案?

由于

2 个答案:

答案 0 :(得分:1)

我相信您可以提供通用解决方案。创建监听器EditabilityListener。当用户更改值时,如果组件应该向服务器发送信号,而所有其他用户都应该获取它,那么他们的JComponent实例将被禁用。

问题在于并发访问。例如,如果用户A在用户B之后但在信号到达其应用程序之前的第二天开始输入文本字段,您想要做什么?

答案 1 :(得分:1)

服务器可以支持组件所有权请求,该请求返回客户端使用的布尔值。服务器端实现应该维护一个知道组件所有权的同步数据结构。例如,您可以使用ConcurrentHashMap(它支持执行可以帮助的原子操作的putIfAbsent)。

请注意,您还需要客户端在发布组件时进行报告(可能还会在服务器中添加所有权超时)。