0

PartView のサイズが変更されたときにスケーリングされるグリッドに画像があります。BarsView が高さ 64 (キャンバスのサイズ) よりも小さい場合、画像の下部が初期サイズより下に切り取られます。サイズ変更されたものよりも大きく開始した場合、ミニバイタルは必要に応じて縮小されません。サイズを変更したときに、そのサイズでプログラムを開いたときのようにレイアウトを変更するにはどうすればよいですか?

プログラムを通常のサイズで開いたときのスクリーンショット:

開始する通常のサイズ

通常のサイズで開いた後に縮小 (集中バーが画面の下部から押し出されていることに注意してください):

ここに画像の説明を入力

小さいサイズで開く:

ここに画像の説明を入力

小さいサイズで開いて展開:

ここに画像の説明を入力

サイズ変更の間に再起動すると、パーツを再起動する必要があることを除いて、望ましい効果があります。

public class BarsView extends ViewPart {
    private PageBook book;
    public void createPartControl(Composite parent) {   
        book = new PageBook(parent, SWT.NONE);
        book.setLayout(new FillLayout());
        Composite page = new BarsPageView(book, view);
        book.showPage(page);
    }
    private class BarsPageView extends Composite {
        public BarsPageView(Composite parent, GameView view) {
        super(parent, SWT.NONE);
        this.setLayout(new GridLayout(3, false));

        // This is a wrapper around a StyledText
        entry = new StormFrontEntry(this, view);
        GridData entryData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
        entryData.heightHint = 22;
        entry.getWidget().setLayoutData(entryData); // getWidget() returns the StyledText

        // This is a Composite containing a Canvas
        status = new StormFrontStatus(this, view);
        status.setLayoutData(new GridData(SWT.CENTER, SWT.BEGINNING, false, false));

        // This is defined below                
        GridData compassData = new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 2);
        compassData.heightHint = 64;
        compass = new WarlockCompass(this, SWT.NONE, theme, compassData);
        compass.setLayoutData(compassData);

        minivitals = new StormFrontDialogControl(this, SWT.NONE);
        GridData mvData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
        minivitals.setLayoutData(mvData);
    }
}

public class WarlockCompass extends Canvas {
    public WarlockCompass (final Composite parent, int style, CompassTheme theme, GridData layoutData) {
        super(parent, style);
        addPaintListener(new PaintListener() {
            public void paintControl(PaintEvent e) {
                drawCompass(e.gc);
            }
        });
        parent.addListener(SWT.Resize, new Listener() {
            @Override
            public void handleEvent(Event event) {
                // I cut out the calculations for this
                layoutData.heightHint = height;
                WarlockCompass.this.setSize(width, height);
            }
        });
    }
    private void drawCompass (GC gc) {
        // Cut out the calculations to scale the image to fix the canvas
        gc.drawImage(scaledImage, 0, 0);
    }
}
4

1 に答える 1

0
    // This is defined below                
    GridData compassData = new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 2);
    compassData.heightHint = 64;
    compass = new WarlockCompass(this, SWT.NONE, theme, compassData);
    compass.setLayoutData(compassData);

になるはずだった:

    // This is defined below                
    GridData compassData = new GridData(SWT.CENTER, SWT.CENTER, false, true, 1, 2);
    compassData.heightHint = 64;
    compass = new WarlockCompass(this, SWT.NONE, theme, compassData);
    compass.setLayoutData(compassData);

そのフラグを変更すると、適切にサイズ変更されます。

于 2013-02-14T22:48:31.497 に答える