当前位置: 首页 > 知识库问答 >
问题:

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

明财
2023-03-14

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

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个BTN。skipButton也不在那里。为什么其他按钮不显示?

共有1个答案

施晗昱
2023-03-14

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

flowlayout对于这些情况来说通常是片状的,这是问题的根源。当宽度太大而高度太小时,它要求一个首选的宽度/高度,然后当它实际上被放入容器时,它没有得到所需的空间量。这是有问题的修复没有回流,这大大减慢了性能...

一个解决办法是使用更确定性的布局,如带有自动适应的网格布局。

 类似资料:
  • 我使用的是带有2条线的图表js折线图。我有7个x轴数据点。我只想显示第一个、第二个和最后一个数据点。但我想在工具提示中显示每个数据点。目前,我只在 x 轴标签中列出 1、2 和 7,因此工具提示在 2 上正确显示,但在其他区域当然什么都没有。那么有没有办法不在x轴上显示特定的数据点(但在代码中仍然有用于工具提示的数据)?(另外,这是一个非常简化的例子,说明我正在尝试做什么) 谢谢。

  • 我正在browserstack上运行量角器测试,并注意到我运行的测试被标记为单独的条目。我想将它们全部分组到一个单独的构建中。我已经在量角器配置文件中添加了功能。但似乎于事无补。正在附加量角器配置字段。感谢你的帮助。 谢谢 然而,当我运行测试时,我注意到测试被附加了。例如,如果我运行5个测试,我只能看到在BrowserStack中执行的最后一个测试。我该怎么解决这个?

  • 问题内容: 我想对字段进行分组,但想显示称为的列的所有行: 这是mysql查询: 问题答案: 使用 SQLFiddle演示 其他链接 MySQL GROUP_CONCAT

  • 问题内容: 如何运行选择所有非null的MySQL查询?就像 我只需要删除所有内容即可吗? 问题答案: 您必须在每列上明确说明条件,例如

  • 我试图显示一个对象中的所有值,但它给了我“必须声明”错误。 我尝试了下面的代码,但仍然出现相同的错误。 而我的对象是: 错误: 错误报告-ORA-06550:第5行,第38列:PLS-00302:组件'ID'必须声明ORA-06550:第5行,第7列:PL/SQL:语句忽略ORA-06550:第6行,第38列:PLS-00302:组件'G'必须声明ORA-06550:第6行,第7列:PL/SQL: