2016-08-31 6 views
0

Eclipse RCP 응용 프로그램에서 간단한 SWT 컨테이너를 만들고 표시되는 위치/순서에 문제가 있습니다. 여기에 제가 사용하고있는 코드가 있습니다.RCP 용 SWT composite 표시 문제

@PostConstruct 
public void createControls(Composite parent) 
{ 
    parent.setBackground(new Color (Display.getCurrent(), 255, 144, 0)); 
    GridData parentData = new GridData(SWT.FILL, SWT.FILL, true, true); 
    parent.setLayout(new GridLayout(1, true)); 
    parent.setLayoutData(parentData); 
    Device device = Display.getCurrent(); 
    Color backgroundColor = parent.getBackground(); 
    Color whiteColor = new Color (device, 255, 255, 255); 
    Color randomColor = new Color (device, 255, 0, 0); 

    final Composite criteriaContainer = new Composite(parent, SWT.BORDER); 
    criteriaContainer.setBackground(randomColor); 
    final GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false); 
    final GridData comboGridData = new GridData(SWT.FILL, SWT.TOP, true, false,1,1); 

    criteriaContainer.setLayout(new GridLayout(1, false)); 
    criteriaContainer.setLayoutData(gridData); 

    final Label primaryComboLabel = new Label(criteriaContainer, SWT.NONE); 
    primaryComboLabel.setLayoutData(comboGridData); 
    primaryComboLabel.setForeground(whiteColor); 
    primaryComboLabel.setText("View by:"); 
    criteriaContainer.layout(); 
    criteriaContainer.pack(); 
    parent.layout(); 
    parent.pack(); 
} 
내가 라벨이 응용 프로그램의 상단에 표시 얻을 수가 캔트

은 [여기 이미지 설명을 입력합니다 (하단 중앙에 나타납니다) [1]. 동일한 코드를 작성하고 독립 실행 형 SWT 응용 프로그램으로 실행하면 레이블이 왼쪽 상단에 나타납니다. [1] : http://i.stack.imgur.com/OL312.png 여기에 내가 standalone swt 앱을 가지고있을 때의 차이점이 있습니다.

public void showHistoryContainer() throws Exception { 
     Display display = new Display(); 
     final Shell shell = new Shell(display); 
     shell.setBackground(new Color (Display.getCurrent(), 255, 144, 0)); 

나머지 코드는 동일합니다. [2] : http://i.stack.imgur.com/fJmR6.png

이것이 어떤 이유 일 수 있습니까?

참고 : 내 RCP 응용 프로그램에서는 부모 합성에 대해 다른 처리를하고 있지 않습니다.

답변

0

createControls의 일부분은 아닙니다. MPart입니까?

이 문제는 실제로 재현 할 수 없지만 코드에 문제를 일으킬 수있는 여러 가지 문제가 있습니다.

코드로 전달 된 Composite의 레이아웃을 변경하십시오 (parent 여기). 자식으로 Composite을 새로 만들고 레이아웃을 설정하십시오.

layoutpack으로 전화하지 마십시오.

그래서 코드를 단순화 내가 가진 :

@PostConstruct 
public void postConstruct(Composite parent) 
{ 
    Display device = parent.getDisplay(); 

    Composite body = new Composite(parent, SWT.NONE); 
    body.setBackground(new Color(device, 255, 144, 0)); 
    body.setLayout(new GridLayout()); 

    Color whiteColor = new Color(device, 255, 255, 255); 
    Color randomColor = new Color(device, 255, 0, 0); 

    Composite criteriaContainer = new Composite(body, SWT.BORDER); 
    criteriaContainer.setBackground(randomColor); 
    criteriaContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); 
    criteriaContainer.setLayout(new GridLayout()); 

    Label primaryComboLabel = new Label(criteriaContainer, SWT.NONE); 
    primaryComboLabel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); 
    primaryComboLabel.setForeground(whiteColor); 
    primaryComboLabel.setText("View by:"); 
} 

마지막으로 당신은 당신이 그들을 처분 준비해야한다 이런 Color 객체를 생성하거나 리소스를 누출됩니다. 이것이 e4 RCP라면 CSS 지원을 대신 사용해야합니다.

+0

포인터에 감사드립니다. Color를 사용할 계획이 아니 었습니다. 컨테이너 만 보았고, 왜 그들이 올바른 장소에 나타나지 않았는지를 보았습니다. (비록 내가 그들 중 하나를 처리에 대해 몰랐지만, 감사합니다) 예 createControls는 MPart입니다. 나는 당신의 코드를 시험해 보았고 컨테이너는 여전히 맨 아래부터 위로 보여지고있다. 아직도 이런 일이 일어나지 않는 이유는 무엇입니까 –

+0

그래서 나는 문제를 알아 냈습니다. 나는 잘못된 클래스를보고 있었기 때문에 코드를 게시하지 않았고 아무 것도하지 않는다고 가정했지만 부모에게 그 클래스에 캔버스를 추가하는 다른 메서드를 전달했습니다. 죄송합니다 신참 실수하지만 유용한 포인터 주셔서 감사합니다. –