2

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

我有一个包含几个 JComponent 的表单,例如 JCheckBox、JTextField、JTextArea 和 JComboBox。问题是我想控制是否允许用户编辑字段的值。当不允许用户编辑字段时,不允许组件进入编辑模式。

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

有人知道该检查的正确位置吗?我是否必须对每个组件进行检查,或者是否有适合我表单中所有 JComponents 的解决方案?

谢谢

4

2 回答 2

1

我相信您可以提供通用解决方案。创建监听器EditabilityListener。当用户更改组件的值时,它应该向服务器发送信号并且所有其他用户都应该得到它,因此他们的 JComponent 实例被禁用。

问题在于并发访问。例如,如果用户 A 在用户 B 之后但在信号到达他的应用程序之前一秒钟开始在文本字段中输入,您会怎么做?

于 2010-12-06T13:03:50.803 回答
1

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

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

于 2010-12-06T13:05:34.013 回答