在Swing中实现拒绝用户更改值的最佳方法?

时间:2010-04-18 06:25:47

标签: java user-interface swing

当某个其他字段为空时,用户不应检查JCheckBox

所以现在我想要弹出一个错误,然后重置复选框(我考虑禁用复选框,但是与其他字段的连接不明显,并且工具提示文本IMO不够明显)。

在Swing中这样做的正确方法是什么?通过PropertyVetoException?我在哪里扔它,我在哪里抓到它?我的第一个(可能是丑陋的)想法是添加一个ChangeListener,它自己显示弹出窗口并重置值。

编辑:问题是关于Nikki(下面的屏幕截图),我正在开发的应用程序,用于对图像进行地理标记并将其导出为Google地球的KMZ格式。该复选框用于选择要包含在导出中的图像。但这需要首先获取图像(这又需要时间戳或手动分配)。我不认为通过UI布局可以明白这个要求。

alt text http://www.brazzy.de/nikki/screenshot_nikki.png

3 个答案:

答案 0 :(得分:2)

我只是禁用复选框并添加一条消息,说明该选项无法使用的原因。显示消息的一种好方法是在复选框旁边显示一个迷你感叹号,并将消息放在工具提示中。

弹出异常通常会感觉不对,因为users don't read error messages。对于大多数用户而言,弹出错误消息意味着应用程序执行了错误操作,在您的情况下,这是正常行为。

编辑如果您坚持让复选框启用,另一种向用户显示缺少某些信息的方法是刷新丢失的数据。例如。如果缺少纬度和经度且用户点击导出,请在这些字段上设置红色背景一秒钟。这将清楚地向用户显示缺少的内容。

在此屏幕中,您不想将鼠标放在红色圆圈上以了解正在发生的事情吗?

validation http://www.vogella.de/articles/EclipseDataBinding/images/validation10.gif

答案 1 :(得分:1)

我认为根本不应该禁用导出JCheckBox。相反,导出JButton本身应检查当前导出列表,并以允许导航到所选照片的​​方式显示任何异常条目。如果所有条目都正确,则导出将照常进行。

附录:它认为您将接口保持为非模态是正确的。我的模型是在退出编辑器时未保存的文件或在IDE中关闭项目时未提交的更改。

如果这是窗口底部的状态行,您可以指出当前选择导出的照片数量,如果还需要地理编码则添加计数。

答案 2 :(得分:0)

应该允许该字段禁用该复选框。如果耦合不直观,则可能必须重新考虑GUI布局。


编辑:我从你的页面运行它,我相信这里的问题是你实际上除了选择文件夹之外还有第三和第四步,选择图像。第三步是验证图像,第四步是选择要导出的图像。我认为你的问题是在目前的布局中没有明确传达,这反映在你的问题中。

我建议您创建一个单独的列,其中包含每个图像的复选框,并且禁用该复选框,直到图像通过验证(步骤3)。也许在专栏中有一个解释性文字,说明图像尚未通过的原因。