编程语言
首页 > 编程语言> > java – 使用MigLayout自动换行

java – 使用MigLayout自动换行

作者:互联网

我希望在使用MigLayout到达屏幕的“边缘”时包装JPanel.目前我有一个JScrollPane(我只想在veritcally中启用). 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,swing,jpanel,layout-manager,miglayout
来源: https://codeday.me/bug/20190704/1373220.html