Avatar billede quisifa Nybegynder
28. oktober 2001 - 14:51 Der er 6 kommentarer og
1 løsning

kommunikation mellem fremmede classer

Hej allesammen jeg har et problem med hensyn til hvordan man inputter noget i min applet fra en klasse der godt nok er blevet importerede og lavet til et objekt, fejlen lægger i at når jeg prøver at compile skidtet siger den at det ikke er en statisk funktion. Og det kan jeg ikke helt forstå.

For ikke at kede jer i hjæl, har jeg kun taget nogen udsnit af min kode:

Fscroll.class:Fscroll er et extended panel:   

if (ColorS == \"r\"){
    r = 255 - sc.getValue();
    Farvesjov.setRed(r);
}

Farvesjov:Farvesjov er en Applet:
public void setRed(int newr){
    show.setGreen(newr);
        userR = newr;
}

Den show jeg smider min talværdi vidre til er så en ny classe der hedder Ffelt, jeg går kun gennem min applet pga. jeg ikke ved hvordan man skal kommunikerer med to classes uden om den applet de lægger i.

Avatar billede nute Nybegynder
28. oktober 2001 - 15:18 #1
du kan ikke kalle en ikke static funksjon på den måten. Du er nødt til å opprette et objekt av typen Farvesjov som du kaller denne metoden på

/nute
Avatar billede quisifa Nybegynder
29. oktober 2001 - 00:34 #2
Det er rigtig nok, men selv om jeg opretter min applet som et objekt i min classe vil den ikke smide noget over i appletten. Det jeg mangler er en måde at kunne kommunikerer på mellem forskellige classer. Det jeg mener er at man skal kommunikerer med en klasse der er oprettet som et objekt to steder, der ved kan man kommunikerer mellem dem.
Avatar billede nute Nybegynder
29. oktober 2001 - 01:06 #3
du skal kalle \'setGreen\' metoden på et objekt av typen \'Farvesjov\'. Noe ála dette:

Farvesjov sjov = new Farvesjov();
sjov.setGreen( r );

eneste måte å gjøre det på...
Avatar billede conrad Nybegynder
29. oktober 2001 - 14:52 #4
Hvis du fra din fscoll klasse vil ændre på dit show objekt, kan du give det med i konstruktoren
fscroll f = new FScroll(Show v);
så kan du lave din show.setgeen inde fra FScroll klasse.

Avatar billede barbie Nybegynder
03. november 2001 - 13:57 #5
Da det er din applet-viewer/browser der opretter en instans af din Applet klasse hjælper det ikke hvis du selv opretter en instans af den og kalder setGreen() på den..

Du kan som conrad siger give dit panel en reference til applet\'en med i constructoren.

du skal i din FScroll have et felt med en reference til apletten:

private Farvesjov sjov;

constructor\'en på din panel skal så se således ud:

public FScroll(Farvesjov enFarvesjov) {
  sjov = enFarvesjov; 
}

Du må et eller andet sted i din applet lave en instans af din FScroll panel. Dette skal ændres til noget i retning af:

panel = new FScroll(this);

(plus selvfølgelig de parametre du bruger i forvejen. constructor\'en skal modificeres tilsvarende.

du kan så i din panel kalde sjov.setGreen()

Hvis du ikke er med på hvad jeg mener, så send eller post de 2 klasser, så er det nemmere at vise præcist hvad der skal laves.

Avatar billede quisifa Nybegynder
08. november 2001 - 20:34 #6
Jeg forstår desværre ikke helt hvad du mener, men her er de klasser der skal kommunikerer sammen:
Dem der skal kommunikerer sammen er Ffelt og Fscroll, så man ved hjælp af Fscroll kan ændre på farverne på Ffelt til højre, det er nemmere at compile og se hvad jeg mener :=)...

Farvesjov:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import Ffelt;
import Fscroll;

public class Farvesjov extends Applet{
//TextArea her bliver der fortalt om du har svarede rigtigt
TextArea svar;
//Felter med farve
Ffelt show;
Ffelt guess;
//Tegner Scrollbars og farvede felter --- opretter plads i hukommelsen
Fscroll scrollR;
Fscroll scrollG;
Fscroll scrollB;
//til random
int r;
int g;
int b;
//De farver brugeren mixer sammen
public int userR;
public int userG;
public int userB;
//knapper
Button start;
Button check;
Button opgiv;

public void init(){
setLayout(null);
setSize(400,350);
setBackground(Color.lightGray);
setForeground(Color.black);

cs();
}

public void cs(){
//random
r=(int)(Math.random()*256);
g=(int)(Math.random()*256);
b=(int)(Math.random()*256);

//Start knap
start = new Button();
start.setBounds(10,310,185,30);
start.setLabel(\"Start\");
start.setVisible(false);
start.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        r=(int)(Math.random()*256);
        g=(int)(Math.random()*256);
        b=(int)(Math.random()*256);
        guess.setFarve(r,g,b);
        guess.setFarve(r,g,b);
        start.setVisible(false);
        check.setVisible(true);
        opgiv.setEnabled(true);
        }
    });
add(start);

//Check knap
check = new Button();
check.setBounds(10,310,185,30);
check.setLabel(\"Check\");
check.setVisible(true);
check.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
        start.setVisible(true);
        check.setVisible(false);
        //Funktion som checker for om det er rigtigt.
        }
    });
add(check);

//Givop knap
opgiv = new Button();
opgiv.setBounds(205,310,185,30);
opgiv.setLabel(\"opgiv\");
opgiv.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    opgiv.setEnabled(false);
    start.setVisible(true);
    svar.setText(\"De farve som du skulle finde var:\\nRød = \" + r + \"\\nGrøn = \" + g + \"\\nBlå = \" + b + \"\\n\\nBedre held næste gang :=)\");
    }
    });
add(opgiv);

//Show viser den nuværende farve
show = new Ffelt();
show.setBounds(250,10,140,140);
show.setFarve(0,0,0);
add(show);

//guess viser den farve du skal gætte
guess = new Ffelt();
guess.setBounds(250,160,140,140);
guess.setFarve(r,g,b);
add(guess);

//Textarea der viser om man har svarede rigtigt
svar = new TextArea(\"\",0,0,3);
svar.setBounds(10,90,230,210);
svar.setBackground(Color.lightGray);
svar.setText(\"Hvis det er første gang du bruger dette program skal du nok lige læse denne tekst.\\n  Programmet skal lærer dig at kende farve, til højre for denne kasse finder du 2 farvede felter det øverste kan du stille på mens det nederste er statisk, det går så ud på at bruge scrollbarsne der hver stmboliserer en farve til at finde ud af den rigtig kombination af rød,grøn og blå når du har gjort det skal du trykke på svar.\\n  Godfornøjelse :=)\");
add(svar);

//Fscroll for Rød.
scrollR = new Fscroll(255,0,0,\"r\");
scrollR.setBounds(10,10,230,30);
add(scrollR);

//Fscroll for Grøn.
scrollR = new Fscroll(0,255,0,\"g\");
scrollR.setBounds(10,35,230,30);
add(scrollR);

//Fscroll for Blå.
scrollR = new Fscroll(0,0,255,\"b\");
scrollR.setBounds(10,60,230,30);
add(scrollR);
}

//Funktioner til kommunikation
public void setRed(int newr){
    show.setRed(newr);
    userR = newr;
    }

public void setGreen(int newg){
    show.setGreen(newg);
    userG = newg;
    }

public void setBlue(int newb){
    show.setGreen(newb);
    userB = newb;
    }
}

Ffelt:
import java.awt.*;

public class Ffelt extends Canvas{
int r;
int g;
int b;

public Ffelt(){}

public void setFarve (int newr,int newg,int newb){
r = newr;
g = newg;
b = newb;
this.setBackground(new Color(r,g,b));
}

public void setRed(int newr){
    r = newr;
    this.setBackground(new Color(r,g,b));
    }

public void setGreen(int newg){
    g = newg;
    this.setBackground(new Color(r,g,b));
    }

public void setBlue(int newb){
    b = newb;
    this.setBackground(new Color(r,g,b));
    }



}

Fscroll:
import java.awt.*;
import java.awt.event.*;
import Ffelt;
import Farvesjov;

public class Fscroll extends Panel implements AdjustmentListener {
public Ffelt tis;
int r;
int g;
int b;
String ColorS = new String(\"null\");
Scrollbar sc;

public Fscroll(int newR, int newG, int newB, String selectC){

    this.setLayout(null);
    this.setSize(100,30);
    this.setBackground(Color.lightGray);

    r= newR;
    g = newG;
    b = newB;
    ColorS = selectC;

    sc = new Scrollbar(Scrollbar.HORIZONTAL, 0, 1, 0, 255);
    sc.setBounds(5,5,175,20);
    add(sc);
    sc.addAdjustmentListener(this);

    tis = new Ffelt();
    tis.setBounds(185,5,35,20);
    tis.setFarve(r,g,b);
    add(tis);
    }

    public void adjustmentValueChanged(AdjustmentEvent e) {
    /*/switch (ColorS){
        case \"r\":
        r = 255 - sc.getValue();
        case \"g\":
        g = 255 - sc.getValue();
        case \"b\":
        b = 255 - sc.getValue();
        }/*/

    if (ColorS == \"r\"){
        r = 255 - sc.getValue();
        //farve.setRed(r);
        }
    else if (ColorS == \"g\"){
        g = 255 - sc.getValue();
        //farve.setGreen(g);
        }
    else if(ColorS == \"b\"){
        b = 255 - sc.getValue();
        //farve.setBlue(b);
        }

    tis.setFarve(r,g,b);

    }


}
Avatar billede quisifa Nybegynder
18. maj 2002 - 15:15 #7
snaps
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