2012-10-11 1 views
4

ScrolledComposite (sc) 내에 복합 (innerComposite)이 있습니다. 런타임시 추가 UI 구성 요소를 추가 할 수 있습니다. 그래서 아래의 코드를 사용하여 추가 UI 구성 요소가 sc를 "오버플로"하는 경우 스크롤 할 수 있도록 sc의 최소 크기를 설정합니다.SWT - ScrolledComposite 내의 여러 줄 텍스트 필드에 대한 computingSize

sc.setMinSize(
    innerComposite.computeSize(
     innerComposite.getSize().x, SWT.DEFAULT 
    ) 
); 

이 sc/innerComposite 내의 SWT 멀티 라인 텍스트 필드에 한 가지 문제가 있습니다.

textBox = new org.eclipse.swt.widgets.Text(parent, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL); 

나는이 멀티 라인 텍스트 필드에 긴 텍스트를 입력

는, 수직 스크롤이 (내가 원하는 무엇이다!)가 나타납니다. 그러나 위 코드를 호출하여 크기를 다시 계산하고 sc.setMinSize()를 설정하면 여러 줄 텍스트 필드의 높이가 입력 된 텍스트의 길이에 맞게 확장됩니다. 이것은 내가 원하는 것이 아닙니다. 이 높이를 스크롤 막대에 그대로두고 입력 한 텍스트에 맞게 크기를 조정하지 않기를 바랍니다.

computeSize은 아이들이 의 크기로 크기 조정하도록합니다. 세로줄을 스크롤 할 수 있기 때문에 여러 줄 텍스트 필드에이 작업을 수행하지 않아도됩니다.

어떻게 이런 일이 일어나지 않도록 할 수 있습니까?

+0

조금 연구했는데이 말은 절망적이라고 말해야합니다. 서브 클래 싱이 허용되지 않기 때문에'Text'의'computeSize' 메소드를 오버라이드 할 수 없습니다. 'Layout'의'computeSize' 메소드는 ** 거대한 ** 메소드 인'layout'을 호출합니다. 내가 볼 수있는 유일한 가능성은이'layout' 메소드 (그것의 자식을 반복)를 오버라이드하고'SWT.MULTI' 스타일로'Text'를 무시하는 것입니다. – Baz

답변

1

문제를 해결할 수있는 또 다른 방법은 나만의 맞춤 레이아웃을 작성하고이를 내부 복합 요소로 설정하는 것입니다. 이렇게하면 컨트롤이 어떻게 나타나는지 정확하게 제어 할 수 있습니다.

0

너비/높이를 설정하여이 문제를 해결했습니다!

+0

필요한 치수는 어떻게 계산 되었습니까? – Link19

1

이 용액은 에 GridLayout을 사용합니다. 이렇게하면 wHint + hHint (복합체에 computeSize()을 수행 할 때 사용됨)을 모두 포함하는 텍스트에 layoutData으로 설정할 수 있지만 verticalGrab을 계속 활성화하면이 복합체의 추가 공간을 나타냅니다. 즉

는 다음 GridLayout의 추천 사이즈는 Composite가 아이의 GridData 년대에서 hHint/wHint를 사용 에드. 이렇게하면 여분의 공간이 있으면 GridData.verticalGrab을 사용하여 텍스트를 확장하면서 선호 크기 인 Text을 설정할 수 있습니다.

관련 문제