我的JFrame中有一个lage JPanel,其中包含“Pages”的arraylist - 扩展JPanel的数据类型,它默认包含JPanel“area”,高度等于它的累计子(默认情况下没有),和BOX.filler(优先级高度是“页面”的全高)。因此,默认情况下,整个“页面”都填充了填充符,填充符随着我向“区域”添加元素而减少。
另外,我有一个包含JPanels的数组列表。它们是进入“区域”的元素。当我添加它们时,当填充物的高度变为零时,我创建一个新的“页面”并将最后一个元素(“离开边界”)移动到它上面。基本上,它应该与MS Word类似。
现在抓住了。用户可以从文档的任何部分自由添加和删除这些元素。问题是,如何在“区域”上的随机点添加元素?可能会通过调用附加到另一个元素的keylistener来进行添加,因此我将知道哪两个元素是随机放置的。
是否有可用于此的布局管理器,还是应该以其他方式完成? 哪个方向?
答案 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);
}
}
导致: