最新の安定版SWTを使用しています。SWTキャンバスロケーション
私は、ToolBar、ScrolledComposite、およびCanvasを含むシェルを持っています。 Canvasは、ScrolledCompositeのコンテンツとして設定されています(例:scrolledComposite.setContent(canvas))。キャンバスは決して変更されない特定のサイズ(たとえば、400×400)で作成されます。 ScrolledCompositeは、利用可能な親シェルのクライアント領域を満たすために絶えず成長しています。
親シェルにリサイズリスナを添付して、以下のことを試みます:a)上記のようにScrolledCompositeを拡大し、b)ScrollledComposite内でキャンバスを水平方向と垂直方向の両方に配置します。
これはMac OS Xの場合とまったく同じですが、Windowsではサイズ変更イベントが発生し、新しい場所が正しく計算されますが、最終的にキャンバスは0,0に戻ってスナップします。もう1つの小さな情報は、ウィンドウのサイズを連続的に変更すると、キャンバスがちらつくのを見ることができ、あたかも正しい場所に短く描かれているかのように見えるということです。
_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);
}
});