28. oktober 2001 - 14:51Der 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.
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.
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.
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.
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 :=)...
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);
//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)); }
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){
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); }
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.