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
,则需要明确布局组件。旋转将隐式触发表单的重新布局。
我在使 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
,则需要明确布局组件。旋转将隐式触发表单的重新布局。