1

我的 JFrame 中有一个大型 JPanel,其中包含“Pages”的数组列表 - 扩展 JPanel 的数据类型,它默认包含 JPanel“区域”,高度等于它的子项的累积值(默认情况下它没有)和 BOX。填充物(首选高度是“页面”的全高)。因此,默认情况下,整个“页面”都充满了填充物,当我向“区域”添加元素时,填充物会减少。

另外,我有一个包含 JPanel 的数组列表。它们是进入“区域”的元素。当我添加它们时,当填充物的高度变为零时,我创建一个新的“页面”并将最后一个元素(它“越界”)移动到它上面。基本上,它的工作原理应该类似于 MS Word。

现在抓住了。用户可以从文档的任何部分自由添加和删除这些元素。问题是,如何将元素添加到“区域”上的随机点?可能会通过调用附加到另一个元素的 keylistener 来进行添加,所以我会知道哪两个元素之间是随机放置的元素。

是否有可用于此的布局管理器,还是应该以其他方式完成?哪一条路?

4

1 回答 1

4

如果我正确理解您的问题,您是在尝试在某个位置插入组件而不是附加它?

如果这是您的问题,您可能需要使用 BoxLayout 和 java 的 swing 容器的 add(component, index) 方法。当然,您可能需要再次将一些子元素移动到下一页,并递归地将下一页的子元素移动到之后的页面。

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class AddAt {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        JLabel one = new JLabel("one");
        JLabel two = new JLabel("two");
        JLabel between = new JLabel("between");

        frame.add(panel);
        panel.add(one);
        panel.add(two);
        panel.add(between, 1);

        frame.pack();
        frame.setVisible(true);
    }
}

结果是: 面板顺序正确的 JFrame

于 2012-08-26T16:46:30.370 回答