Avatar billede el_gnu Nybegynder
05. december 2001 - 21:52 Der er 1 løsning

paintComponent(Graphics) i SWING component

Hej eksperter,

Jeg sad lige og kiggede på JavaBeans og for lige at få styr på hvordan det virker så ville jeg lige lave et forsøg. Så jeg gik i gang med at konvertere en applet jeg lavede tidligere i år, om til en JavaBean. Det gik sådan set fint nok og Forte lod mig tilføje den til min Component Palette.
Nu tilføjede jeg den så til en jForm og forventede at der ligesom blev tegnet noget... men nej, ikke en gang baggrundsfarven blev tegnet, heller ikke når jeg kører programmet :-(

Hvad dælen gør jeg galt?

På forhånd tak, gnuen.

min paintComponent metode:

    public void paintComponent(Graphics gr) {
        if ((dBuffer == null) || (dBuffer.getWidth(this) != this.getWidth()) || (dBuffer.getHeight(this) != this.getHeight()))
            dBuffer = this.createImage(this.getWidth(), this.getHeight());
        Graphics g = dBuffer.getGraphics();
        g.clearRect(0, 0, dBuffer.getWidth(this), dBuffer.getHeight(this));
        g.setColor(getForeground());
        //Lav en matrix der flytte punkterne fra objektsystemet til skærmsystemet
        Matrix3D tilSkaerm = new Matrix3D();
        //Objektsystemet parallelforskydes, så origo falder sammen med sigtepunktet
        tilSkaerm.parallelforskyd(sigtePunkt[0], sigtePunkt[1], sigtePunkt[2]);
        //Objektsystemet roteres om x-aksen, så øjepunktet kommer til at ligge i xz-planen
        //theta = -tan-1(øjeY/øjeZ)
        tilSkaerm.roter(-Math.atan(oejePunkt[1]/oejePunkt[2]), Matrix3D.X_AKSE);
        //Objektsystemet roteres om y-aksen, så øjepunktet kommer til at ligge på z-aksen
        //theta = tan-1(øjeX/sqrt(øjeY^2+øjeZ2))
        tilSkaerm.roter(Math.atan(oejePunkt[0]/Math.sqrt(oejePunkt[1]*oejePunkt[1]+oejePunkt[2]*oejePunkt[2])), Matrix3D.Y_AKSE);
        //Skærmens y-akse vender nedaf, svarende til en rotation på pi radianer om x-aksen
        tilSkaerm.roter(Math.PI, Matrix3D.X_AKSE);
        //Forskyd alle punkter til midten af skærmen
        tilSkaerm.parallelforskyd(this.getWidth()/2, -this.getHeight()/2, 0);
       
        //Tegn evt. akserne
        if (visAkser && (akser != null)) {
            //Hent punkter
            double[][] aksePunkter = tilSkaerm.transformerPunkter(akser.Punkter);
            //tegn
            for (int i=0 ; i<akser.Linjer.length ; i++)
                g.drawLine((int) (aksePunkter[akser.Linjer[i][0]-1][0]),(int) (aksePunkter[akser.Linjer[i][0]-1][1]),(int) (aksePunkter[akser.Linjer[i][1]-1][0]),(int) (aksePunkter[akser.Linjer[i][1]-1][1]));
            //skriv navn på akserne
            g.drawString(\"x\",(int) aksePunkter[1][0], (int) aksePunkter[1][1]);
            g.drawString(\"y\",(int) aksePunkter[15][0], (int) aksePunkter[15][1]);
            g.drawString(\"z\",(int) aksePunkter[29][0], (int) aksePunkter[29][1]);
        }
       
        //Tegn modellen, forudsat den findes
        if (model != null) {
            //Flyt modellens punkter fra objektsystemet til skærmen
            double[][] punkter = Matrix3D.multiplicer(tilSkaerm, model.mat).transformerPunkter(model.Punkter);
           
            //Tegn linjer
            for (int i=0 ; i<model.Linjer.length ; i++)
                g.drawLine((int) (punkter[model.Linjer[i][0]-1][0]),(int) (punkter[model.Linjer[i][0]-1][1]),(int) (punkter[model.Linjer[i][1]-1][0]),(int) (punkter[model.Linjer[i][1]-1][1]));
            //Tegn evt. labels
            if (visLabels) {
                //Hent koordinaterne i objektsystemet
                double[][] labelPunkter = model.mat.transformerPunkter(model.Punkter);
                for (int i=0 ; i<punkter.length ; i++)
                    g.drawString(\"(\"+(int)labelPunkter[i][0]+\",\"+(int)labelPunkter[i][1]+\",\"+(int)labelPunkter[i][2]+\")\",(int) punkter[i][0],(int) punkter[i][1]);
            }
        }
        gr.drawImage(dBuffer, 0 , 0, this);
    }
   
    public double[] getOejePunkt() {
        return oejePunkt;
    }
Avatar billede el_gnu Nybegynder
06. december 2001 - 16:34 #1
problemet lå et andet sted, doh!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB