簡體   English   中英

GridBagLayout:搖擺

[英]GridBagLayout: Swing

對於Swing中的GridBaGLayout,我的觀點是一個非常基本的疑問。 我試圖首先將給定的幀分為三部分,權重分別為(0.2、0.2和0.6)。 下面的代碼可以正常工作,因為我看到三個部分分別具有權重。

        JFrame frame = new JFrame();
        frame.setLayout(new GridBagLayout());
        JPanel p1= new JPanel(), p2 = new JPanel(), p3 = new JPanel();


    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.BOTH;

    c.weightx = 1;
    c.weighty = 0.2;
    c.gridx = 0;
    c.gridy = 0;
    frame.add(p1,c);
    p1.setBackground(Color.lightGray);

    c.gridy = 1;
    frame.add(p2,c);
    p2.setBackground(Color.gray);

    c.weighty = 0.6;
    c.gridy = 2;
    frame.add(p3,c);
    p3.setBackground(Color.blue);

接下來,我嘗試在面板p1中添加一個JLabel。 像這樣: p1.add(new JLabel("Hi")) 如果在添加前后觀察打開的框架,則會看到兩種情況下分配的權重差異。 首先(未添加JLabel時)分配0.2、0.2和0.6。 其次,添加JLabel時,第一個面板增加一點,第二個面板減少一點。 您還可以在下面的圖片中看到:

在此處輸入圖片說明

這是什么原因呢? 我認為這與根據父框架或面板中的可用空間分配權重的布局有關。 但是不太了解其合理性。
weightx / y划分基於可用空間。 那么面板p1和p2如何獲得幾乎相同的高度? 令框架的高度為h。 當添加p1時,可用高度為h,則p1變為0.2 * h,剩下的可用高度為0.8h。 現在,當必須添加p2時,將為其分配0.8h的0.2,即0.16h。 那么p1和p2(淺灰色和深灰色背景色)如何看起來具有相同的高度?

另外,如何實現恆定分割並保持面板的權重與分配的權重相同?

我試圖首先將給定的幀分為三部分,權重分別為(0.2、0.2和0.6)。

“ weightx / y”約束用於“額外”空間。

每個組件都有其首選大小的空間。 然后,如果幀大小增加,則會按指定比例為每個組件提供額外的空間。 因此,除非每種組分的優選尺寸也處於規定的比例,否則這些組分將不具有總期望的比例。

空的JPanel的高度為10(基於FlowLayout的默認大小計算)。 因此,所有3個面板的首選高度均為30。

如果內容窗格的大小為130,則您有100像素的額外空間,因此面板的大小變為:

p1 = 10 + (100 * .2) = 30
p2 = 10 + (100 * .2) = 30
p3 = 10 + (100 * .6) = 70

將標簽添加到p1時,首選高度將變為10加標簽的高度,假設(10 + 15)=25。因此,現在3個面板的首選高度為(25 + 10 + 10)= 45。因此,只能以您指定的比例划分85個像素。

如何實現恆定的划分並使面板的權重與分配的權重相同?

您可以查看相對布局 它旨在允許您指定每個組件的相對大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM