2

swtのキャンバスで作業を始めたところです。グラフィックコントローラー(gc)からの描画コマンドは、キャンバスに接続されている任意のリスナーで実行できるという印象を受けています。しかし、私の質問は、ペイントリスナーメソッドをトリガーするものは何paintControlですか?

canvas.redraw()これも実行されますか?

私を正しい方向に向けることができる人に感謝します。この件について読むことができるチュートリアルや本があれば(一般的にはswtの2D描画も)、聞いてみたいと思います。

編集: これがコードです、graphCanvasが余分な垂直スペースを埋めていないという問題が発生していますか?余分な水平方向のスペースを埋めても機能しません。しかし、これらのプロパティをコンポジットに適用すると機能するようです。何か案が?

Color black = Display.getCurrent().getSystemColor(SWT.COLOR_BLACK);
    chartComposite = new Composite(parent, SWT.NONE);
    GridLayout chartGridLayout = new GridLayout(1,false);
    GridData chartGridData = new GridData();
    chartGridData.grabExcessHorizontalSpace = true;
    chartGridData.grabExcessVerticalSpace = true;

    chartComposite.setLayout(chartGridLayout);
    chartComposite.setLayoutData(chartGridData);

    chartInnerComposite = new Composite(chartComposite, SWT.NONE);
    GridLayout chartInnerGridLayout = new GridLayout(2,false);
    GridData chartInnerGridData = new GridData();
    chartInnerGridData.grabExcessHorizontalSpace = true;
    chartInnerGridData.grabExcessVerticalSpace = true;
    chartInnerComposite.setLayout(chartInnerGridLayout);
    chartInnerComposite.setLayoutData(chartInnerGridData);
    /**
     * Create the four canvases
     */

    Canvas yCanvas = new Canvas(chartInnerComposite, SWT.None);
    graphCanvas = new Canvas(chartInnerComposite, SWT.None);
    GridLayout graphGridLayout = new GridLayout(1, false);
    graphGridLayout.makeColumnsEqualWidth = false;
    GridData graphGridData = new GridData(SWT.FILL);
    graphGridData.widthHint = 400;
    graphGridData.grabExcessVerticalSpace = true;
    graphCanvas.setLayout(graphGridLayout);
    graphCanvas.setLayoutData(graphGridData);
    graphCanvas.addPaintListener(new PaintListener() {

        @Override
        public void paintControl(PaintEvent e) {
            e.gc.drawLine(20, 20, 500, 500);
            e.gc.drawRectangle(0, 0, graphCanvas.getSize().x -1, graphCanvas.getSize().y -1);

            e.gc.drawLine(0, 40, 500, 500);
            e.gc.drawLine(0, 0, 0, 1200);
            e.gc.drawLine(0, 0, 1200, 0);               
        }
    });
    /*graphCanvas.setSize(400, 400);
    graphCanvas.redraw();
    graphCanvas.update();*/


    Canvas filler = new Canvas(chartInnerComposite, SWT.NONE);
    Canvas xCanvas = new Canvas(chartInnerComposite, SWT.None);
4

1 に答える 1

1

コードは間違いなく canvas.redraw() を手動で呼び出すことができます。これにより、paintControl イベントがトリガーされます。SWT 自体も、ウィンドウのサイズ変更や、キャンバスが他のウィンドウによって隠されたり隠されなくなったりしたときに、必要に応じて再描画をトリガーします。

于 2012-08-23T15:50:33.310 に答える