2

検討 -

public class MainCanvas extends Canvas {...}

Display display = new Display();
display = new Display();
myShell = new Shell(display);
myCanvas = new MainCanvas(myShell, SWT.NO);
GC myGC = new GC(myShell);
myGC.fillOval(10,20,30,40) ; //paint shape ..

myGC.fillOval(10,20,30,40) ;次に、キャンバスからペイントされた形状を削除したいと思います。

最後のペイントを削除するコマンド、またはキャンバスをクリアするコマンドはありますか?

4

1 に答える 1

1

とても良い質問です。JAVA SWT を使い始めたばかりで、同じ問題に遭遇しました。

私が思いついた解決策は、他の何にも影響を与えずにその内容を空にする必要があるたびに、キャンバスを新しいものと同じものに置き換えることです。

このために、canvas.dispose()コマンドを使用し、shell.redraw ()shell.pack( ) を使用してシェルを再描画して再パックし、ウィンドウのサイズが適切に変更されるようにします。これらのコマンドは、ボタン (以下の例では Enter ボタン) の押下など、別のイベントから呼び出されます。また、以下の例では GridLayout を使用していることに注意してください (詳細については、 http://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.htmlを参照してください) 。整数の配列を使用してポリラインを作成しています。

    myCanvas = new Canvas(shell, SWT.BORDER); // create the initial instance of the Canvas
    gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
    gridData.widthHint = 1100; // set desired width
    gridData.heightHint = 800; // set desired height
    gridData.verticalSpan = 3; // set number of columns it will occupy
    myCanvas.setLayoutData(gridData);


    myEnter_Button.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent mainEvent) {
            myCanvas.dispose(); // delete the Canvas
            myCanvas = new Canvas(shell, SWT.BORDER);
            GridData redrawGridData = new GridData(GridData.FILL, GridData.FILL, true, true);
            redrawGridData.widthHint = 1100;
            redrawGridData.heightHint = 800;
            redrawGridData.verticalSpan = 3;
            myCanvas.setLayoutData(redrawGridData);
            shell.redraw();
            shell.pack(); // pack shell again

    myCanvas.addPaintListener(new PaintListener() {
                public void paintControl(final PaintEvent event) {
                    // coordinateIntegerArray not displayed in this example
                    event.gc.drawPolyline(coordinateIntegerArray);//draw something

                    }
                }
            });

            myCanvas.redraw();
        }
    });

これが役に立ったことを願っています。描画された最後のペイント オブジェクトを排他的に削除/元に戻す方法を見つけることができたら、必ずお知らせします。

乾杯!

于 2013-09-23T14:30:29.027 に答える