首页 文章

所有组件都不会显示在Borderlayout.South中

提问于
浏览
2

我在下面的代码中复制了一个奇怪的问题 . 我已经在模拟器和设备中进行了测试,结果是一样的 . 我在容器中有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也不存在 . 为什么没有显示其他按钮?

enter image description here

1 回答

  • 0

    不要过多地调用 revalidate ,因为除了减慢应用程序它可能会破坏布局 . 只应在整个布局完成时调用它 .

    FlowLayout 对于这些情况通常是不稳定的,它是问题的根源 . 它要求宽度太大而高度太小的优选宽度/高度,然后当它实际放入容器时,它没有给出所需的空间量 . 在没有回流的情况下进行修复会产生问题,这会显着降低性能...

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

相关问题