【问题标题】:Java Miglayout wrap JPanelsJava Miglayout 包装 JPanels
【发布时间】:2016-08-04 13:13:39
【问题描述】:

我想弄清楚为什么我在添加 JPanel 后无法换行。我的目标是让一个类构建我的 JPanel,然后我会将它添加到主屏幕,所有 JPanel 都堆叠在一起。如果我用 JLables 替换 JPanels,我可以让它工作。这是我目前的结果:

JPanel zPanel = new JPanel();
    for(int i = 0; i < zones.size(); i++ )
    {
        JLabel zLabel = new JLabel(zones.get(i));
        zPanel.add(zLabel);
        grid.add(zPanel,"wrap");
    }

而我正在尝试做的事情:

for(int i = 0; i < zones.size(); i++ )
    {
        JLabel zLabel = new JLabel(zones.get(i));
        grid.add(zLabel,"wrap");
    }

【问题讨论】:

    标签: java swing layout-manager miglayout


    【解决方案1】:

    如果要将JLabel 添加到JPanel 中,则需要将其包裹在JPanel 本身中。并且,当所有子项都已填充时,添加 zPanel

    JPanel zPanel = new JPanel(new MigLayout("wrap 1");
    for(int i = 0; i < zones.size(); i++ )
    {
        JLabel zLabel = new JLabel(zones.get(i));
        zPanel.add(zLabel);
    }
    grid.add(zPanel,"wrap");
    

    【讨论】:

    • 问题不在于 JLabels 不换行。如底部图片所示,这是正常工作的。问题是 JPanel 没有包装,因为每个 JLabel 都有一个单独的 JPanel。
    • 在顶部代码上,我看到只有在声明的 zpanel 上,因此,所有 JLabel 都具有相同的 JPanel 父级。
    • Facepalm 就是这样。介意编辑你的答案,以便我标记正确吗?
    • 但是如果你在运行中声明新的 JPanel,例如在 for 语句中,你可能会失去对面板的引用。
    • 对,但是对于我正在从事的项目,我不需要再次引用它。
    猜你喜欢
    • 1970-01-01
    • 2020-08-16
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多