组件选择器不按正确的顺序返回组件



对于我的用例,ComponentSelector.$("#...", myCnt)给定容器中显示的顺序返回选定的组件至关重要,假设我使用的是BoxLayout.y()并且在调用ComponentSelector之前添加和删除组件。

目前ComponentSelector.$("#...", myCnt)以随机顺序返回组件。

例:

Form hi = new Form("Hi World", BoxLayout.y());
Label label1 = new Label("cmp 1");
label1.setName("toBeSaved");
Label label2 = new Label("cmp 2");
label2.setName("toBeSaved");
Label label3 = new Label("cmp 3");
label3.setName("toBeSaved");
Label label4 = new Label("cmp 4");
label4.setName("toBeSaved");
Label label5 = new Label("cmp 5");
label5.setName("toBeSaved");
Label label6 = new Label("cmp 6");
label6.setName("toBeSaved");
Label label7 = new Label("cmp 7");
label7.setName("toBeSaved");
Label label8 = new Label("cmp 8");
label8.setName("toBeSaved");
Label label9 = new Label("cmp 9");
label9.setName("toBeSaved");
Label label10 = new Label("cmp 10");
label10.setName("toBeSaved");
hi.addAll(label1, label2, label3, label4, label5, label6, label7, label8, label9, label10);
hi.show();
for (Component cmp : ComponentSelector.$("#toBeSaved", hi.getContentPane()).asList()) {
if (cmp instanceof Label) {
Log.p(((Label) cmp).getText());
}
}

输出:

[EDT] 0:0:0,153 - cmp 2
[EDT] 0:0:0,153 - cmp 7
[EDT] 0:0:0,153 - cmp 8
[EDT] 0:0:0,153 - cmp 1
[EDT] 0:0:0,153 - cmp 6
[EDT] 0:0:0,153 - cmp 4
[EDT] 0:0:0,153 - cmp 3
[EDT] 0:0:0,153 - cmp 9
[EDT] 0:0:0,153 - cmp 10
[EDT] 0:0:0,153 - cmp 5

这是因为该类使用HashSet来防止重复。我用LinkedHashSet代替了它,它应该有望解决问题:https://github.com/codenameone/CodenameOne/commit/2ef6a77e4f8ac3475a8c05541b8ac829099ac9a9

最新更新