Codename One 应用 UI 编程更新后容器未呈现

Codename One app UI Container not rendering after programmatic update

我在使 UI 在 Codename One 应用程序中正常工作时遇到问题。我已将其提炼为加载 ParentContainer 的“入门应用程序”。

ParentContainer 有一个更新 ChildContainer 的 SINGLE 按钮。它实际上只是在您单击按钮时删除和添加标签。

问题:ChildContainer 似乎不想呈现标签?它是空的。如果我通过旋转设备强制在模拟器中进行硬刷新,那么它会渲染标签一次。我还检查了 Codename One 桌面应用程序构建,发现了同样的问题。对于桌面构建,我可以调整主要 window 的大小,它将呈现标签。

没有任何程序可以让它显示出来。无效()/重绘()/ callSerially()

即使在我让它显示之后,如果我再次按下 ParentContainer 按钮,它也会消失。我究竟做错了什么?任何帮助将不胜感激。

public class BugTestApp extends Lifecycle {

    @Override
    public void runApp() {
        Form hi = new Form("Hi World");
        hi.setLayout(new BorderLayout());

        ParentContainer container = new ParentContainer();
        container.init();

        hi.add(BorderLayout.CENTER, container);
        hi.show();
    }
}
public class ParentContainer extends Container {
    ChildContainer childContainer=null;
    
    public void init() {
        
        this.setLayout(new BorderLayout());
        Button btnFilterCategory = new Button("CLICK ME TO ACTIVATE");
        btnFilterCategory.addActionListener(e-> {
            childContainer.reloadAll();
        });
        this.add(BorderLayout.NORTH,btnFilterCategory);

        childContainer = new ChildContainer();
        childContainer.initComponents();
        this.add(BorderLayout.CENTER, childContainer);
    }
}
public class ChildContainer extends Container {

    public void initComponents() {
        setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        reloadAll();
    }

    public void reloadAll() {
        this.removeAll();
        this.add(new Label("This is a label."));
        this.repaint();
    }
}

repaint() 在这里不是正确的方法。您需要使用的是 revalidate()animateLayout(int)

repaint() 重新绘制没有 resizing/laying 的组件。新组件的大小为零。如果将组件添加到已经显示的 Form,则需要明确布局组件。旋转将隐式触发表单的重新布局。