2017-02-23 4 views
1

여러 컨트롤을 만드는 클래스가 있지만 클래스 자체가 합성 또는 위젯이 아닙니다. 컨트롤의 레이아웃은 모두 new GridLayout(1, false)입니다. 클래스 레벨 GridLayout을 정의하여 모든 컨트롤에 사용할 수 있는지 여부는 확실하지 않습니다. 당신은 내가 3 개 개의 동일한 GridLayout 인스턴스를 생성 여기 보시다시피 여기에 코드 예제다른 컨트롤간에 레이아웃 인스턴스를 공유하는 것이 안전합니까?

public void createControl(Composite parent) { 
    parent.setLayout(new GridLayout(1, false)); 

    Composite comp1 = new Composite(parent, SWT.NONE); 
    comp1.setLayout(new GridLayout(1, false); 

    Composite comp2 = new Composite(parent, SWT.NONE); 
    comp2.setLayout(new GridLayout(1, false); 

    // ... other stuff 
} 

입니다. 이러한 모든 컨트롤에 대해 하나의 클래스 수준의 insance를 사용할 수 있습니까? 모든 보안 문제 또는 성능 단점?

+0

그런데 저는 보통 코드에서 GridLayout과 다른 리소스를 재사용하고 있으며 지금까지 문제가 발생하지 않았습니다. 그러나 공유 자원을 변경하면 이전에받은 모든 제어/위젯이 변경 될 것이라고 예상하지 마십시오. –

답변

1

SWT는 실제로 레이아웃 객체를 다시 사용하는 것이 안전하지 않으므로 안전하지 않다고 가정해야합니다.

코드 모양이 GridLayout 일 수 있기 때문에 재사용 할 수는 있지만 각 시도마다 새로운 레이아웃을 사용하는 데 드는 비용은 거의 들지 않으므로 이것을 시도하지 않았습니다.

또는 당신은 당신이 여러 복합에 적용 할 수있는 표준 레이아웃을 정의하는 GridLayoutFactory를 사용할 수 있습니다

GridLayoutFactory factory = GridLayoutFactory.swtDefaults(); 

factory.applyTo(comp1); 

factory.applyTo(comp2); 

그것은 확실히 입니다하지, 각 제어를위한 별도의 GridData 객체가 있어야합니다 GridData를 다시 사용하는 것이 안전합니다 .

+0

대단히 감사합니다. – CMZS