2012-08-26 66 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

不客氣! –