我正在使用两个AutocompleteTextFilters作为依赖过滤器。我希望第二个过滤器根据第一个过滤器的建议更改其选项。
我在第一个过滤器上绑定了一个事件侦听器,以便当它失去焦点时会在第二个过滤器上触发一个过程。
问题是第二个过滤器从不更改其选项。我什至设置了硬编码的值,以防万一我的代码有问题,但是没有运气。
我使用的代码如下:
public CreateSubmission(com.codename1.ui.util.Resources resourceObjectInstance, Map<String, ProjectType> projectTypes) {
this.projectTypes = projectTypes;
initGuiBuilderComponents(resourceObjectInstance);
gui_ac_projecttype.clear();
gui_ac_projecttype.setCompletion( this.projectTypes.keySet().toArray( new String[0]) );
gui_ac_projecttype.addFocusListener( new ProjectTypeFocusListener( this ));
gui_ac_steps.setCompletion( new String[]{"t10", "t20"});
}
public void makeSteps (String selection) {
ProjectType projectType = this.projectTypes.get( selection );
if (projectType != null) {
this.selectedProjectType = selection;
int length = projectType.projectSteps.length;
String[] steps = new String[ length ];
for(int i =0; i < length; i ++) {
steps[i] = projectType.projectSteps[i].projectStep;
}
// String[] s = gui_ac_steps.getCompletion();
gui_ac_steps.setCompletion( new String[]{"t1", "t2"} );
gui_ac_steps.repaint();
}
else {
}
}
public class ProjectTypeFocusListener implements FocusListener{
private CreateSubmission parent;
public ProjectTypeFocusListener( CreateSubmission parent ) {
this.parent = parent;
}
@Override
public void focusGained(Component cmp) {
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public void focusLost(Component cmp) {
this.parent.makeSteps (
((AutoCompleteTextField)cmp).getText()
);
//throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
在上面的代码中,初始化发生在“ public CreateSubmission”方法上。 “ gui_ac_projecttype”是第一个通过其FocusListener处理程序(类ProjectTypeFocusListener)触发整个过程的AutocompletionTextField
“ gui_ac_steps”是必须更改其值的第二个AutocompleteTextField过滤器。在上面的代码中,我初始化了对“ t10”,“ t20”的建议。正确显示了这两个值。
后来,我从FoculListenerHandler的方法“ ProjectTypeFocusListener.focusLost”调用了方法“ makeSteps”,该方法将建议选项设置为“ t1”,“ t2”,然后重新绘制该组件。这两个值永远都不会显示。第一个值是“ t10”,“ t20”。
奇怪的是,当我问gui_ac_steps.getCompletion();时,在调试器中查看当前选项(在makeSteps方法中注释掉的代码),我得到了正确的值“ t1”,“ t2”。
但是在屏幕上,它始终显示“ t10”,“ t20”。
感谢任何帮助。
答案 0 :(得分:0)
您不应在焦点侦听器中做任何“重要”的事情。特别是没有文本字段。它们有些不可靠,因为文本字段切换到本机编辑,并且实际上将焦点转移到了本地编辑。问题在于,某些事件由于本机编辑的来回原因而延迟,因此,在收到焦点事件时,您已移至下一个字段。
为此特定用例https://www.codenameone.com/blog/dynamic-autocomplete.html
尝试类似的操作