【问题标题】:All components are not displayed in Borderlayout.SouthBorderlayout.South 中不显示所有组件
【发布时间】:2016-11-25 12:42:03
【问题描述】:

我在下面的代码中复制了一个奇怪的问题。我已经在模拟器和设备中进行了测试,结果是一样的。我在一个容器中有 26 个按钮(它的布局是 flowlayout),它本身位于 BorderLayout 的南部(表单布局)。但只能看到部分按钮。我在下面的代码中做错了什么? revalidate 也不做任何事情。

setLayout(new BorderLayout());

TextArea questionTextArea = new TextArea("1) question ..........");
Container questionContainer = new Container();
questionContainer.add(questionTextArea);

Container questionAnswerContainer = BoxLayout.encloseY(questionContainer);
add(BorderLayout.CENTER, questionAnswerContainer);

Container optionsContainer = new Container(new FlowLayout(Label.CENTER, Label.CENTER));
for (int i = 0; i < 26; i++) {
    Button optionButton = new Button("i");
    optionsContainer.add(optionButton);
}
optionsContainer.revalidate();

Button skipButton = new Button("SKIP");
Container bottomContainer = BoxLayout.encloseY(optionsContainer, skipButton);
bottomContainer.revalidate();
add(BorderLayout.SOUTH, bottomContainer);
//f.revalidate();

这里只看到 7 个 btns。 skipButton 也不存在。为什么其他按钮不显示?

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    不要过多地调用revalidate,因为除了会减慢应用程序的速度外,它还可能会破坏布局。只有在整个布局完成时才应该调用它。

    FlowLayout 在这些情况下通常是不稳定的,它是问题的根源。它请求一个首选的宽度/高度,其中宽度太大而高度太小,然后当它实际放入容器中时,它没有得到所需的空间量。如果没有回流会显着降低性能,这是有问题的...

    一种解决方法是使用更具确定性的布局,例如具有自动调整功能的网格布局。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      相关资源
      最近更新 更多