我有一些很长的形式有很多字段(和方框)。
因此,我希望有一些快捷键按钮可以滚动到表单中的特定groupBox
。
我试试
getMyFieldInBox.requestFocus()
如果字段不是label
或groupBox
,那么女巫会工作。
如果我在groupBox
上尝试此操作,则会返回错误信息:
Javascript would be the way to go.
我的问题是,并非所有的组合框都具有第一个可聚焦的"领域。
如何实现这一目标?我尝试将getConfiguredFocusable()
框中的true
覆盖为var array = [
238,
259,
276,
307
];
var dataset ={};
array.map(function(value, index) {
dataset[index]= value
});
,但不起作用。
答案 0 :(得分: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);
}
}
}
致以最诚挚的问候,
Mattthias
答案 1 :(得分:1)
从人机工程学的角度来看,应避免使用可滚动的形式。
(从历史上看,表单不可滚动。可滚动表单是针对特殊情况引入的,例如在演示时应对beamers的低屏幕分辨率。)
理想情况下,表单应设计为在用户屏幕上很好地呈现数据。这要求用户的屏幕分辨率已知。
一般情况下,请尝试调整以下指南: