0

我有一些很长的表格,里面有很多字段(和框)。因此,我希望有一些快捷按钮可以滚动到特定groupBox的形式。

我试试

getMyFieldInBox.requestFocus()

如果 field 不是labelor ,则女巫工作groupBox

如果我尝试这样做,groupBox则会返回一个错误:

在此处输入图像描述

我的问题是,并非所有组框都有第一个“可聚焦”字段。

如何做到这一点?我尝试getConfiguredFocusable()在框中覆盖 to true,但不起作用。

4

3 回答 3

2

是的,确实,我能够通过尝试聚焦一个组框来重现该错误(不确定应该在组框项目上“聚焦”什么,但肯定不会发生此错误!)!因此,请随时开票并报告问题!也许我们在关注不知道要关注什么的字段时遇到一个常见问题(例如,分组框和标签等)

不确定,如果我正确理解了您的问题,但我建议(作为一种解决方法),您requestFocus()在您的组框(例如主框)中覆盖,您可以在其中递归地收集所有可聚焦(并且可能是特殊类型)的子字段,按顺序对它们进行排序,然后获得第一个可用的(如果有的话)并将重点放在上面。否则什么都不做。

可能是这样的:

    @Override
    public void requestFocus() {
        final Map<Double, IFormField> orderedFields = new TreeMap<>();
        getBoxWithDesiredFocusableFields().visitFields(new IFormFieldVisitor() {

            @Override
            public boolean visitField(IFormField field, int level, int fieldIndex) {
                if (field.isFocusable() && field....some specific conditions) {
                    orderedFields.put(field.getOrder(), field);
                }
                return true;
            }
        }, 0);

        if (orderedFields.keySet().iterator().hasNext()) {
            // Focusable fields available -> get first focusable field
            IFormField firstFocusableField = orderedFields.get(orderedFields.keySet().iterator().next());
            if (firstFocusableField != null) {
                firstFocusableField.getForm().requestFocus(firstFocusableField);
            }
        }
    }

此致,

马蒂亚斯

于 2016-03-18T09:57:25.613 回答
2

M7 将修复请求对组框的关注。第一个可聚焦的字段将获得焦点。如果组框没有可聚焦的字段,则在该组框上请求焦点时不会执行任何操作。

于 2016-04-13T11:32:04.837 回答
1

从人体工程学的角度来看,应避免使用可滚动的表单。

(从历史上看,表单是不可滚动的。可滚动表单是为特殊情况引入的,例如在进行演示时应对投影仪上的低屏幕分辨率。)

理想情况下,表单应该被设计为在用户的屏幕上很好地呈现数据。这需要知道用户的屏幕分辨率。

一般来说,请尝试调整以下准则:

  1. 将表单中最重要的信息放在最上面。
  2. 次要的信息应该放在底部。
  3. 更不重要的信息应该放在标签中。
于 2016-05-17T10:14:31.867 回答