可视化arraylist

时间:2012-08-26 16:22:15

标签: java swing arraylist jpanel layout-manager

我的JFrame中有一个lage JPanel,其中包含“Pages”的arraylist - 扩展JPanel的数据类型,它默认包含JPanel“area”,高度等于它的累计子(默认情况下没有),和BOX.filler(优先级高度是“页面”的全高)。因此,默认情况下,整个“页面”都填充了填充符,填充符随着我向“区域”添加元素而减少。

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

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

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

1 个答案:

答案 0 :(得分:4)

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

如果那是你的问题,你可能想要使用Box的循环容器的BoxLayout和add(组件,索引)方法。当然,您可能需要再将一些孩子移动到下一页,然后将下一页的子项递归到后一页。

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 with panels in the right order