2012-08-26 35 views
1

我在我的JFrame中有一个大型的JPanel,其中包含“Pages”数组类型 - 扩展JPanel的数据类型,它默认包含JPanel“area”,高度等于它的子集中的累积值(默认情况下它没有)和BOX.filler(提供的高度是“页面”的全高)。因此,默认情况下,整个“页面”填充了填充,随着向“区域”添加元素而减少。可视化arraylist

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

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

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

回答

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

+0

JEP,是解决它!谢谢! =) – Karlovsky120

+1

不客气! –