2012-08-10 55 views
0

有三種不同類型的面板,每種面板都有不同數量的網格。 1 * 3,1 * 1,3 * 1。如何在Miglayout管理器顯示前設置面板的邊界?

add(panel1, "span 1 3,push, grow"); 
add(panel2, "push, grow"); 
add(panel3, "span 3 1,push, grow"); 

我想改變第一板的約束「跨度1 2」,當它與屏幕上的其它面板重疊。但要找出它是否與另一個小組重疊,我必須知道它是有限的。

我沒有設置任何大小限制。

有什麼辦法,知道'面板/組件實際顯示之前的界限'嗎?

而且,如何知道由MigLayout管理器設置的行和列的長度?

其實我想用這些不同尺寸的面板覆蓋整個屏幕。

編輯:

我忘記輸入的罪魁禍首...... add(lastPanel, span, push, grow)

我試圖覆蓋整個屏幕具有不同尺寸的面板。此代碼適用於偶數個矩形,但不適用於奇數。當它們的數量是奇數時,最後一個網格總是空着。因此,我跨越了最後一塊麪板以覆蓋整個空的可用空間,但隨後它與3 * 1面板重疊。

+0

不明白「重疊」是什麼意思 - 你想達到什麼目的?那些許多推動約束是不尋常的...有條件的佈局不被支持,afaik(大多數時間不需要)請示例,最好在代碼中,至少有一個草圖 – kleopatra 2012-08-11 08:11:09

回答

1

我又得到了類似的問題,但是這次我得到了答案,我可能對某人有幫助,所以我在這裏發佈。

addAncestorListener(new AncestorListener() { 
     @Override 
     public void ancestorAdded(AncestorEvent event) { 
       height = getHeight(); 
       width = getWidth(); 
       //Modifications to the components here. 
     } 

我想要在編譯時由LayoutManager設置的尺寸(這不是可能的)。只要將組件放置在屏幕上,AncestorListener就可以做到這一點。它捕捉尺寸並相應地修改組件。

1

我可以想到幾種方法,不是很好或很漂亮,都遭受同樣的問題。

佈局可以連續重複出現(也就是你將與衆多的請求重挫佈局快速連續的容器)

的陷阱試圖找出當它來停止。下一個問題是你知道的。

您可以覆蓋父母Container s doLayout方法,在調用super.doLayout之後,您將可以訪問生成的佈局。這不是最好的解決方案,因爲它要求您實施您可能不想要的Container

我能想到的另一個解決方案是使用panel1上的ComponentListener監視componentResized事件。

我會認真玩弄這些,看看你陷入了什麼麻煩。更好的解決方案是提前嘗試解決佈局問題。

+0

我只是簡單地強迫用戶輸入偶數個矩形,或者如果用戶輸入奇數個矩形,則自己添加一個矩形。對不起,以前的信息較少。感謝您寶貴的時間。 – SagarDabas 2012-08-11 16:12:24

1

JPanel(默認情況下適用於每Swing JComponents)返回其在兩種情況下

  1. SizeBounds如果pack()Top-Level Container

後一次時,屏幕

  • 上可見

    有沒有理由知道這個v Alue for Standard LayoutManagers,也不適用於MigLayout,

  • +0

    嗯...是的,但我只是想知道是否有任何方式或黑客存在事先知道我的佈局經理會做什麼。無論如何感謝您的時間。 – SagarDabas 2012-08-11 16:01:27

    相關問題