2017-02-28 89 views
-1

我正在設計一個面板以使用GridBagLayout來顯示項目。我要尋找的結果是這樣的:並非GridBagLayout中顯示的所有項都行

enter image description here

不過,目前我看到以下內容:

enter image description here

然後我初始化我的面板和設置佈局:

JPanel surveyDetailsFieldsPane = new JPanel(); 
surveyDetailsFieldsPane.setMinimumSize(new Dimension(0, 300)); 
surveyDetailsFieldsPane.setPreferredSize(new Dimension(410, 300)); 
GridBagLayout detailsGridBagLayout = new GridBagLayout(); 
surveyDetailsFieldsPane.setLayout(detailsGridBagLayout); 
surveyDetailsFieldsPane.setBorder(new EmptyBorder(STANDARD_BORDER, 
      STANDARD_BORDER, 
      STANDARD_BORDER, 
      STANDARD_BORDER)); 

我初始化我的組件以添加到網格中:

JLabel jobNameLbl.setText("Job Name:"); 
JTextField jobNameTF = new JTextField(20); 

JLabel jobNumLbl.setText("Job Number:"); 
JTextField jobNumTF = new JTextField(12); 

然後我用addComponentToSurveyDetailsGrid方法將組件添加到網格:

// Row 1 
addComponentToSurveyDetailsGrid(jobNameLbl, 0, 0, 1, 1, 0, 0, GridBagConstraints.NONE, GridBagConstraints.WEST); 
addComponentToSurveyDetailsGrid(jobNameTF, 1, 0, 1, 1, 0, 0, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST); 
// Row 2 
addComponentToSurveyDetailsGrid(jobNumLbl, 0, 1, 1, 1, 10, 0, GridBagConstraints.NONE, GridBagConstraints.WEST); 
addComponentToSurveyDetailsGrid(jobNumTF, 1, 1, 0, 1, 40, 0, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST); 
addComponentToSurveyDetailsGrid(dateLbl, 4, 1, 1, 1, 10, 0, GridBagConstraints.NONE, GridBagConstraints.WEST); 
addComponentToSurveyDetailsGrid(dateTF, 5, 1, 0, 1, 40, 0, GridBagConstraints.HORIZONTAL, GridBagConstraints.WEST); 

如下所示使用方法:

private void addComponentToSurveyDetailsGrid(Component component, int gridX, int gridY, 
          int gridWidth, int gridHeight, int weightX, 
          int weightY, int fill, int anchor) { 

    GridBagConstraints constraint = new GridBagConstraints(); 
    constraint.gridx = gridX; 
    constraint.gridy = gridY; 
    constraint.gridwidth = gridWidth; 
    constraint.gridheight = gridHeight; 
    constraint.weightx = weightX; 
    constraint.weighty = weightY;  
    constraint.fill = fill; 
    constraint.anchor = anchor; 
    constraint.insets = new Insets(Dimens.SMALL_BORDER, 
           Dimens.SMALL_BORDER, 
           Dimens.SMALL_BORDER, 
           Dimens.SMALL_BORDER); 
    detailsGridBagLayout.setConstraints(component, constraint); 
    surveyDetailsFieldsPane.add(component); 
} 

請讓我知道我做錯了這裏!

+0

gridbaglayout是非常棘手的,我想,這就是爲什麼我切換到jgoodies formlayout。我想這與你的'weightx'有關,你如何創建你的網格 – XtremeBaumer

+1

1)爲了更好地幫助你,請發佈[MCVE]或[Short,Self Contained,Correct Example](http://www.sscce。組織/)。 2)以最小尺寸提供ASCII藝術或簡單的GUI圖形*圖形,並且如果可調整大小,則具有更大的寬度和高度。 –

+0

@AndrewThompson提供的圖紙有什麼問題? – petehallw

回答

3

我懷疑這將解決你的問題,但:

addComponentToSurveyDetailsGrid(jobNumLbl, 0, 1, 1, 1, 10, 0, ... 
addComponentToSurveyDetailsGrid(jobNumTF, 1, 1, 0, 1, 40, 0, ... 
addComponentToSurveyDetailsGrid(dateLbl, 4, 1, 1, 1, 10, 0, ... 
addComponentToSurveyDetailsGrid(dateTF, 5, 1, 0, 1, 40, 0, ... 

你的gridx值是0,1,4,5

你不能只是嘗試將組件添加到電網4。 GridBagLayout不會神奇地將組件添加到網格2和3.因此,您需要將組件添加到網格2和3.

如果您希望jobname文本字段佔據其下的3個組件的空間,則當您添加作業名稱文本字段時,您需要指定網格寬度值3。

請參閱How to Use GridBagLayout上Swing教程的部分。本教程將解釋gridwidth參數如何工作,併爲您提供下載和測試的工作示例。

相關問題