2017-02-28 13 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으로 전환 한 이유가 매우 까다 롭습니다. 나는 당신의 격자와 당신의 그리드를 어떻게 만들었는지 짐작합니다. – XtremeBaumer

+1

1) 더 나은 도움을 받으려면 [MCVE] 또는 [짧은, 자기 포함, 올바른 예] (http : //www.sscce. org /). 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 텍스트 필드를 추가 할 때 gridwidth 값을 3으로 지정해야합니다.

How to Use GridBagLayout에 대한 스윙 튜토리얼의 섹션을 읽으십시오. 이 튜토리얼에서는 gridwidth 매개 변수의 작동 방식과 다운로드 및 테스트를위한 작업 예제를 제공합니다.