Java swt-canvas-wie funktioniert das paint listener arbeiten?

Ich habe gerade erst begonnen Arbeit mit swt-canvas. Ich bin unter dem Eindruck, dass die draw-Befehle von der Grafik-controller (gc) kann ausgeführt werden in jedem listener zugeordnet ist, auf die Leinwand. Ich denke aber, meine Frage ist, was löst die Farbe listener-Methode paintControl?

Macht die canvas.redraw() dazu führen, dass dies so gut lief?

Dank für alle, die mich in die richtige Richtung. Wenn es tutorials oder Bücher, die ich Lesen kann auf die Materie(die 2d-Zeichnung in swt im Allgemeinen als gut), würde ich lieben zu hören von Ihnen.

EDIT:
Hier ist der code, den ich in einem Thema, wo die graphCanvas nicht füllt überschüssige vertikalen Raum? Es funktioniert nicht wenn ich es füllen excessHorizontal Raum. Aber es scheint zu funktionieren wenn ich die Eigenschaften der composites. Irgendeine Idee?

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);
Ich verstehe nicht, Ihre Letzte Frage. Können Sie bitte ein SSCCE (sscce.org). Dann kann ich es mir und versuche Euch zu helfen.
Ich bin in der Lage, verwenden Sie die widthHint und heightHint geben dem Bild eine manuelle Größe. Aber ich bin nicht in der Lage, um die Leinwand zu dehnen, sowohl die überschüssige vertikalen und horizontalen Raum.
Sollten Sie wirklich ein SSCCE. Sonst werde ich zu erraten, was falsch läuft...
Ich entwickle mit Eclipse RCP framework und der code oben ist in etwa so eigenständig wie, ich kann mir vorstellen, dass es?

InformationsquelleAutor Mike Depies | 2012-08-23

Schreibe einen Kommentar