![](/img/trans.png)
[英]Java, GridBagLayout. How add components right to other component
[英]Adding component to my GridBagLayout moves other components far to the right
當我嘗試布局JPanel
時,我看到了一些非常奇怪的結果。 一切正常之前,我添加了最后JTextField
subline
:
當我再補充一點,在JTextField
它上面移動到右側,以便它開始的地方subline
結束:
這是創建此布局的代碼:
public class Opspanel extends JPanel{
private static final long serialVersionUID = -6393281054430179953L;
public Opspanel() {
GridBagLayout layout = new GridBagLayout();
setLayout(layout);
GridBagConstraints constraints = new GridBagConstraints();
constraints.gridx = 0;
constraints.gridy = 0;
constraints.anchor = GridBagConstraints.LINE_START;
add(new JLabel("Vendor ID"), constraints);
constraints.gridx = 1;
constraints.gridy = 0;
constraints.anchor = GridBagConstraints.LINE_START;
JTextField vendorid = new JTextField();
vendorid.setPreferredSize(new Dimension(100,20));
add(vendorid, constraints);
constraints.gridx = 0;
constraints.gridy = 1;
constraints.anchor = GridBagConstraints.LINE_START;
add(new JLabel("Email Date"), constraints);
constraints.gridx = 1;
constraints.gridy = 1;
constraints.anchor = GridBagConstraints.LINE_START;
JTextField emaildate = new JTextField();
emaildate.setPreferredSize(new Dimension(100,20));
add(emaildate, constraints);
constraints.gridx = 2;
constraints.gridy = 1;
constraints.anchor = GridBagConstraints.LINE_START;
add(new JLabel("Email Time"), constraints);
constraints.gridx = 3;
constraints.gridy = 1;
constraints.anchor = GridBagConstraints.LINE_START;
JTextField emailtime = new JTextField();
emailtime.setPreferredSize(new Dimension(100,20));
add(emailtime, constraints);
constraints.gridx = 0;
constraints.gridy = 2;
constraints.anchor = GridBagConstraints.LINE_START;
add(new JLabel("Subject Line"), constraints);
constraints.gridx = 1;
constraints.gridy = 2;
constraints.anchor = GridBagConstraints.LINE_START;
JTextField subline = new JTextField();
subline.setPreferredSize(new Dimension(500, 20));
add(subline, constraints);
}
}
我怎樣才能解決這個問題?
根據GridBagLayout
的文檔 ,
每個
GridBagLayout
對象維護一個動態的矩形單元格網格,每個組件占據一個或多個單元格,稱為其顯示區域。
在您的代碼中,網格有3行4列。 您要告訴每個組件在gridx
和gridy
給定的位置恰好占據一個單元。
您可能不喜歡其中的某些“停止”或“開始”,這一事實表明您確實希望其中的一些占據一個以上的單元。
你真幸運! GridBagLayout
可以做到這一點。 您正在尋找GridBagLayout.gridwidth
:
指定組件顯示區域中一行的單元格數。
使用
REMAINDER
可以指定組件的顯示區域是從gridx
到行的最后一個單元格。 使用RELATIVE
可以指定組件的顯示區域是從gridx
到其行中最后一個區域的下一個區域。
gridwidth
應該為非負值,默認值為1。
在您的示例中,將“主題行”文本字段放在第二列( gridx = 1
)。 由於您將gridwidth
保留為其默認值1
,因此該文本字段不能與第三或第四列重疊。 因此,如果增長,則整個列都必須隨之增長。
您可以通過覆蓋多個網格單元來填充整個水平空間。 (如果您熟悉Microsoft Excel或Microsoft Word或類似程序中的表,則類似於“合並單元格”選項。)
為了使其覆蓋3列,從gridx = 1
:
constraints.gridx = 1;
constraints.gridwidth = 3;
或者,使其覆蓋從列gridx = 1
到右側的所有單元格:
constraints.gridx = 1;
constraints.gridwidth = GridBagLayout.REMAINDER;
只是不要忘記在使用它來添加另一個本應僅覆蓋一列的組件之前將gridwidth
重置為1!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.