2014-09-25 17 views
0

我似乎無法找到正確的layoutmanager,也許它不存在,所以我想在miglayout中做到這一點,但我似乎無法找到我的方式來做到這一點。佈局拉伸組件的寬度,但讓高度決定它的含義

絕大多數文檔,教程和例子,我發現在所有0.o

不ADRESS JPanel中有內容我遇到的,我有兩個JPanels問題(C 1 & 2 )在一個JPanel(B)中,而JPanel(B)又是一個更大的可調整大小的JPanel(A)。 現在無論是最低級 「C」 JPanels包含5個按鈕,當最高級別 「A」 調整大小,並得到更少寬度按鈕從這個去:

enter image description here

這樣:

enter image description here

正如你可以看到我在最低級別上使用的FlowLayout「C」JPanels正在做它的工作!

c.setLayout(new FlowLayout(FlowLayout.LEFT,0,0)) 

不過,雖然「B」的JPanel持有的C的不正是我想要的水平部分

b.setLayout(new BoxLayout(b, BoxLayout.Y_AXIS)); 

我不希望它這樣做的高度,但!

那麼有誰能指出我正確的方向,就像一個教程或覆蓋這些東西的文檔?對於miglayout或擺動佈局管理器?

+0

你從來沒有說過什麼調整你真正想要的行爲,所以它是不可能告訴你如何得到這一點。您可能需要將某些內部JPanel的寬度設置爲不可調整大小。 – Gene 2014-09-25 12:14:37

+0

@Gene我想讓按鈕從水平線移動到垂直線,因爲寬度被調整大小,同時**如果包含它們的面板改變它的高度以適合它們,那麼會很好。**(寬度可以停留在它父母面板的價值上) – 2014-09-25 18:50:44

+0

(對於遲到的回覆!抱歉,無法預料的情況抱歉)哦,非常感謝你在這些照片中編輯盧卡斯,非常有幫助,善良的你! – 2014-09-25 18:52:51

回答

0

我使用MigLayout管理器創建了一個解決方案。調整窗口大小時,面板保持其高度爲 ,並且永遠不會縮小到保持所有按鈕所需的尺寸 以下。

package com.zetcode; 

import java.awt.EventQueue; 
import javax.swing.BorderFactory; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import net.miginfocom.swing.MigLayout; 


public class MigLayoutSolution extends JFrame { 

    public MigLayoutSolution() { 

     initUI(); 
    } 

    private void initUI() { 

     JPanel pnl = new JPanel(new MigLayout()); 

     pnl.add(createPanel1("First"), "push, grow, wrap"); 
     pnl.add(createPanel2("Second"), "push, grow"); 

     add(pnl); 
     pack(); 

     setTitle("MigLayout solution"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    } 

    private JPanel createPanel1(String text) { 

     JPanel pnl = new JPanel(new MigLayout()); 
     pnl.add(new JButton("A")); 
     pnl.add(new JButton("B")); 
     pnl.add(new JButton("C")); 
     pnl.add(new JButton("D")); 
     pnl.setBorder(BorderFactory.createTitledBorder(text)); 

     return pnl; 
    }  

    private JPanel createPanel2(String text) { 

     JPanel pnl = new JPanel(new MigLayout()); 
     pnl.add(new JButton("E")); 
     pnl.add(new JButton("F")); 
     pnl.add(new JButton("G")); 
     pnl.add(new JButton("H")); 
     pnl.setBorder(BorderFactory.createTitledBorder(text)); 

     return pnl; 
    }   

    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       MigLayoutSolution ex = new MigLayoutSolution(); 
       ex.setVisible(true); 
      } 
     });   
    } 
} 

第一個畫面顯示兩個面板用大量的空的空間。

MigLayout Solution 1

第二圖爲在其最小尺寸的面板。

MigLayout Solution 2

相關問題