가장 안정적인 SWT 버전을 사용하고 있습니다.SWT 캔버스 위치
ToolBar, ScrolledComposite 및 Canvas가 포함 된 셸이 있습니다. 캔버스는 ScrolledComposite의 콘텐츠로 설정됩니다 (예 : scrolledComposite.setContent (canvas)). Canvas는 변경되지 않는 특정 크기 (예 : 400 x 400)로 생성됩니다. ScrolledComposite가 사용 가능한 상위 쉘 클라이언트 영역을 채우기 위해 끊임없이 증가하거나 축소되는 반면.
다음과 같은 시도를하는 부모 셸에 resize 리스너가 첨부되어 있습니다. a) 위에서 설명한대로 ScrolledComposite 크기를 늘리고 b) ScrolledComposite 내에서 Canvas를 가로 및 세로 가운데에 가운데에 배치합니다 (아래 예제 코드 참조).
이것은 Mac OS X에서와 똑같이 작동하지만 Windows에서는 크기 조정 이벤트가 발생하고 새 위치가 제대로 계산되지만 궁극적으로 Canvas는 다시 0,0으로 스냅합니다. 또 하나의 작은 정보는 창 크기를 지속적으로 조정하면 캔버스가 깜박 거리는 것을 볼 수 있으며 올바른 위치에 잠시 그려진 것처럼 보입니다.
_shell.addListener (SWT.Resize, new Listener() {
public void handleEvent (Event e)
{
int toolBarOffset = _toolBar.getSize().y;
Rectangle clientArea = _shell.getClientArea();
_scrollComposite.setBounds(0, toolBarOffset, clientArea.width, clientArea.height - toolBarOffset);
Point canvasSize = _canvas.getSize();
int canvasX = Math.max(0, (clientArea.width/2) - (canvasSize.x/2));
int canvasY = Math.max(0, ((clientArea.height - toolBarOffset)/2) - (canvasSize.y/2));
_canvas.setLocation(canvasX, canvasY);
}
});