我似乎对容器如何计算高度与容器中的组件相比感到困惑。
我有一个带有TableLayout的Container,它有1行和2列。在这两个单元格中都有不同的TextAreas。
TableLayout tl = new TableLayout(1, 2);
Container container = new Container(tl);
TextArea ta1 = new TextArea("Some long text");
TextArea ta2 = new TextArea("Some other long text");
container.add(tl.createConstraint().widthPercentage(50), ta1);
container.add(tl.createConstraint().widthPercentage(50), ta2);
我遇到的问题是容器的高度大约是两个TextAreas的高度的两倍,这在TextAreas下留下了一个很大的,不需要的空隙。
我已经尝试重写calcPreferredSize方法,该方法似乎与我放入的任何Dimension一起使用。问题是我不知道两个TextAreas的高度是多少。
我做错了什么?
感谢。
答案 0 :(得分:0)
这是一个固有的回流问题。文本区域不“知道”将给出多少空间,因此它从父布局请求特定的首选大小。
父布局使用自己的逻辑,该逻辑与首选大小有一定关系,但也与您的请求有某种关系(例如50%宽度,2列)。它为文本区域提供了“认为”可以工作的空间。如果没有,文本区域会尝试重新调整大小一次,但这可能会导致我们不准确。
一些框架,例如HTML支持回流的概念,它不断地列出一切。这通常是为什么HTML比大多数原生UI慢的原因。回流看起来很整洁但是通常很难检测到它被“摧毁你的CPU”所征税。
避免这种情况的一个常见技巧是确定文本区域的行/列并禁用文本区域的grow with content选项。这使得组件的大小更具确定性,同时也略微提升了性能。但是,它可能会导致不受欢迎的效果,例如文本被裁剪。