2016-11-24 34 views
2

我在下面的代码中复制了一个奇怪的问题。我已经在模拟器和设备&中测试过,结果是一样的。我有一个容器中的26个按钮(它的布局是flowlayout),它本身在BorderLayout的南部(窗体的布局)。但只有部分按钮被看到。我在做下面的代码时犯了什么错误?重新验证也不起作用。所有组件都不显示在Borderlayout.South中

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

回答

0

不要叫revalidate太多,因为除了减慢应用它可能会破坏布局。只应在整个布局完成时调用它。

FlowLayout对于这些情况通常是片状的,它是问题的根源。它要求宽度太高,高度太小的首选宽度/高度,然后当它实际放入容器时,它不会获得所需的空间量。这是修复无需回流的问题,这会显着降低性能...

解决方法是使用更具确定性的布局,如具有自适应的网格布局。