gpt4 book ai didi

java - 使用 MigLayout 自动换行

转载 作者:搜寻专家 更新时间:2023-11-01 03:26:13 27 4
gpt4 key购买 nike

我希望在 JPanel 到达屏幕的“边缘”时使用 MigLayout 对其进行包装。目前我有一个 JScrollPane(我只想垂直启用)。 JScrollPane 包含任意数量的水平排列的 JPanel - 当添加面板时 JPanel 会离开我希望它添加到下一行的边缘。这可能吗?

这是代码:

public void setupPanels(){
JScrollPane scrollPane = new JScrollPane();
JPanel mainPanel = new JPanel(new MigLayout("insets 2"));

for (Object object : objects){
JPanel subPanel = new JPanel(new MigLayout("insets 0"));
mainPanel.add(subPanel, "alignx left, gapx 2px 5px, gapy 2px 2px, top");
}

scrollPane.setViewportView(mainPanel);
}

此外,要添加一个额外的因素,每次它到达边缘时我都需要添加一个新的/不同的面板(时间轴)——那么有没有办法找出它何时换行到新行?

谢谢

最佳答案

MigLayout 没有这样的功能。它基于网格,虽然您可以使用 nogrid 选项在单元格范围内水平或垂直排列组件,但不能使它们排列到下一行或下一列。

JDK中包含的java.awt.FlowLayout自动包装了包含的组件:

JPanel mainPanel = new JPanel(new FlowLayout());
mainPanel.add(subPanel1);
mainPanel.add(subPanel2);
mainPanel.add(subPanel3);
...

首选高度已关闭,但有一些方法可以解决此问题,请参阅 WrapLayout

关于第二个要求:

Also, to add an extra factor, everytime it reaches the edge I need to add a new/different panel (A timeline) - so is there a way of finding out when it is going to wrap onto a new line?

布局管理器应该对已经添加到容器中的组件进行布局,而不是根据布局结果添加新组件。在布局管理器按需显示的每个子面板之后为时间线添加不可见的占位符组件可能会奏效。

您肯定需要一个自定义布局管理器来执行此操作。要开始,我建议使用 FlowLayout 的源代码。在 layoutContainer 实现中,有一个循环遍历所有组件。换行后,检查下一个组件是否为时间轴占位符组件,使其可见并再次换行。

关于java - 使用 MigLayout 自动换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13272083/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com