ComponentSelector 没有 return 组件的正确顺序

ComponentSelector doesn't return Components in the correct order

对于我的用例,至关重要的是 ComponentSelector.$("#...", myCnt) returns 所选组件 的顺序与它们在给定容器 中的显示顺序相同,假设我正在使用 BoxLayout.y() 并在调用 ComponentSelector.

之前添加和删除组件

目前 ComponentSelector.$("#...", myCnt) returns 随机顺序的组件。

示例:

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

这是因为 class 使用 HashSet 来防止重复。我将其替换为 LinkedHashSet,这有望解决问题:https://github.com/codenameone/CodenameOne/commit/2ef6a77e4f8ac3475a8c05541b8ac829099ac9a9