Avatar billede 1nz4n3 Nybegynder
02. september 2005 - 23:18 Der er 28 kommentarer og
1 løsning

Java: Underlig fejl.

Hvad gør jeg forkert?
Den vil ikke vise appleten, men vil gerne compile den?

Tror det er noget med String brugernavn; eller det med g.drawString, men btw. koden er her:


import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class platIT extends Applet implements MouseListener
{
Image figur;
Image offScreen;
Graphics bufferGfx;
Image baggrund;
Point mouseDown = null;
String brugernavn = getParameter("brugernavn");
 

    public void init()
    {
        addMouseListener(this);
        figur = getImage(getCodeBase(),"bil.gif"); // Figur
        baggrund = getImage(getCodeBase(),"room.gif");  // Baggrunden
        offScreen = createImage (this.getWidth(), this.getHeight());
        bufferGfx = offScreen.getGraphics();
    }

      public void paint(Graphics g)
      {
          bufferGfx.clearRect(0,0,this.getWidth(),this.getHeight());

        bufferGfx.drawImage(baggrund,0,0,this);
        if (mouseDown != null)
            bufferGfx.drawImage(figur, mouseDown.x-40, mouseDown.y-15, this);     
        bufferGfx.drawString(brugernavn,mouseDown.x-40,mouseDown.y-15); 
        g.drawImage(offScreen,0,0,this);
      }   
   
      public void mouseClicked(MouseEvent e)
      {
        mouseDown = new Point((int) e.getX(), (int) e.getY());
        repaint();
      }
     
      public void update (Graphics g)
      {
          paint(g);
      }
 
      public void mousePressed(MouseEvent e)    {}
      public void mouseReleased(MouseEvent e) {}
      public void mouseEntered(MouseEvent e)    {}
      public void mouseExited(MouseEvent e)    {}
}
Avatar billede mikkelbm Nybegynder
02. september 2005 - 23:28 #1
Ved ikke lige om det hjælper, men hvad hvis du flytter instansieringen af brugernavn ned i din init?

Altså:

....
String brugernavn;
...

public void init ()
{
    ....
    brugernavn = getParameter("brugernavn");
    ....
}
Avatar billede mikkelbm Nybegynder
02. september 2005 - 23:29 #2
Og måske tjekker på om den læser din parameter rigtigt:

brugernavn = getParameter("brugernavn");
if (brugernavn == null)
    brugernavn = "Wrong username";


På den måde kan du se om det er der fejlen ligger.
Avatar billede 1nz4n3 Nybegynder
02. september 2005 - 23:41 #3
Har dette i øjeblikket. Højden er god nok, men mangler at få teksten til at være i CENTER, hvis man kan gøre det .

  bufferGfx.drawString(brugernavn,CENTER HER,mouseDown.y+70);
Avatar billede 1nz4n3 Nybegynder
02. september 2005 - 23:46 #4
For:
Kan jo ikke bare lave figurens bredde / 2 , for så hvis teksten er på 90 tegn så vil den jo ikke stå center, det vil kun virke hvis ens tekst er på 1 tegn, forstår du?
Avatar billede mikkelbm Nybegynder
02. september 2005 - 23:47 #5
Så bliver du selv nødt til at regne center ud:

int center = (this.getWidth() / 2);
Avatar billede mikkelbm Nybegynder
02. september 2005 - 23:47 #6
2 minutter... Jeg finder lige et eksempel på hvordan det kan gøres rigtigt.
Avatar billede 1nz4n3 Nybegynder
02. september 2005 - 23:48 #7
Okay.
Avatar billede mikkelbm Nybegynder
02. september 2005 - 23:53 #8
int textWidth = bufferGfx.getFontMetrics().stringWidth(brugernavn);
int appletWidth = this.getWidth();
int x = (appletWidth / 2) - (textWidth / 2);
bufferGfx.drawString(brugernavn, x, 50);
Avatar billede 1nz4n3 Nybegynder
02. september 2005 - 23:55 #9
int textWidth = bufferGfx.getFontMetrics().stringWidth(brugernavn);

siger den
'.class' expeted, hvad mener den?
Avatar billede mikkelbm Nybegynder
02. september 2005 - 23:57 #10
Har du det i din paint-metode?

public void paint(Graphics g)
{
        bufferGfx.clearRect(0,0,this.getWidth(),this.getHeight());

        bufferGfx.drawImage(baggrund,0,0,this);
        if (mouseDown != null)
            bufferGfx.drawImage(figur, mouseDown.x-40, mouseDown.y-15, this);     

        int textWidth = bufferGfx.getFontMetrics().stringWidth(brugernavn);
        int appletWidth = this.getWidth();
        int x = (appletWidth / 2) - (textWidth / 2);

        bufferGfx.drawString(brugernavn,x,mouseDown.y-15); 
        g.drawImage(offScreen,0,0,this);
}
Avatar billede 1nz4n3 Nybegynder
02. september 2005 - 23:57 #11
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class madsen extends Applet implements MouseListener
{
Image figur;
Image offScreen;
Graphics bufferGfx;
Image baggrund;
Point mouseDown = null;
String brugernavn;
int textWidth, appletWidth, x;
 

    public void init()
    {
   
        brugernavn = getParameter("brugernavn");
     
textWidth = bufferGfx.getFontMetrics().stringWidth(brugernavn);
appletWidth = this.getWidth();
x = (appletWidth / 2) - (textWidth / 2);
        addMouseListener(this);
        figur = getImage(getCodeBase(),"figur.gif"); // Figur
        baggrund = getImage(getCodeBase(),"room.gif");  // Baggrunden
        offScreen = createImage (this.getWidth(), this.getHeight());
        bufferGfx = offScreen.getGraphics();
    }

      public void paint(Graphics g)
      {
          bufferGfx.clearRect(0,0,this.getWidth(),this.getHeight());

        bufferGfx.drawImage(baggrund,0,0,this);
        if (mouseDown != null)
   
            bufferGfx.drawImage(figur, mouseDown.x-40, mouseDown.y-15, this);     
        bufferGfx.drawString(brugernavn,x,mouseDown.y+70); 
        g.drawImage(offScreen,0,0,this);
      }   
   
      public void mouseClicked(MouseEvent e)
      {
        mouseDown = new Point((int) e.getX(), (int) e.getY());
        repaint();
      }
     
      public void update (Graphics g)
      {
          paint(g);
      }
 
      public void mousePressed(MouseEvent e)    {}
      public void mouseReleased(MouseEvent e) {}
      public void mouseEntered(MouseEvent e)    {}
      public void mouseExited(MouseEvent e)    {}
}

- Ingen fejl ved compile men melder fejl ved udskrivning, hvad i alverden er der galdt?
Avatar billede 1nz4n3 Nybegynder
02. september 2005 - 23:58 #12
Uha, perfekt.
Men den fungere ikke rigtigt.

Når man klikker rundt i applet´n så går teksten frem og tilbage.
Avatar billede 1nz4n3 Nybegynder
02. september 2005 - 23:59 #13
Skal siges  det kun er når man klikker til siderne.
Avatar billede 1nz4n3 Nybegynder
03. september 2005 - 00:00 #14
int appletWidth = this.getWidth(); det jo applet'ns skal det ikke være selve "figur.gif" ?
Avatar billede mikkelbm Nybegynder
03. september 2005 - 00:01 #15
Det er for du bruger mouseDown.y+70 - den varierer jo alt efter hvor musen er...
Avatar billede mikkelbm Nybegynder
03. september 2005 - 00:02 #16
Det kommer an på hvad du vil? Jeg er ikke helt med længere...
Avatar billede 1nz4n3 Nybegynder
03. september 2005 - 00:11 #17
Det fordi jeg vil prøve at lave et spil, som jeg nok ikke når langt med, men anyway.
http://www.java.frac.dk/

Se.
Hvis du så lige kan fortælle mig hvordan jeg sætter farven til hvid, så ville det være perfekt, men by the way..

Teksten skal hele tiden være under smiley'en!
Avatar billede 1nz4n3 Nybegynder
03. september 2005 - 00:15 #18
Det kræver du lige trykker engang på applet'n da den underligt bare viser hvid i starten :´/
Avatar billede mikkelbm Nybegynder
03. september 2005 - 00:17 #19
Teksten kan sætte til hvid ved at:

bufferGfx.setColor (Color.white);
....

Og hvis den skal være under smiley'en tror jeg følgende kan gøre det:

int textWidth = bufferGfx.getFontMetrics().stringWidth(brugernavn);
int smileyX = mouseDown.x;
int x = x - (textWidth / 2);
bufferGfx.setColor (Color.white);
bufferGfx.drawString(brugernavn, x, mouseDown.y+70);


(Ikke testet)
Avatar billede mikkelbm Nybegynder
03. september 2005 - 00:22 #20
Hovsa...

int smileyX = mouseDown.x;
int x = x - (textWidth / 2);


skal være

int smileyX = mouseDown.x;
int x = smileyX - (textWidth / 2);
Avatar billede 1nz4n3 Nybegynder
03. september 2005 - 00:32 #21
Uha, perfekt! :)
Du har virklig styr på tingene.

Smider du et svar?

Kommer lige med et ekstra spørgsmål:
Hvorfor hvis man klikker hurtigt rundt på applet'n så er det ligesom den ikke registrer museklikkende?

Altså hvis du klikker rigtigt hurtigt rundt, så er det ligesom det "hakker" / "lagger"
Avatar billede mikkelbm Nybegynder
03. september 2005 - 00:35 #22
Hmm... Hvad hvis du flytter det ned i din mousePressed i stedet for mouseClicked ?

Giver det nogen effekt?

Altså:

public void mouseClicked(MouseEvent e)
{
    mouseDown = new Point((int) e.getX(), (int) e.getY());
    repaint();
}

bliver til:

public void mousePressed(MouseEvent e)
{
    mouseDown = new Point((int) e.getX(), (int) e.getY());
    repaint();
}


Hvis det ikke har nogen effekt, så ved jeg det ikke.
Avatar billede mikkelbm Nybegynder
03. september 2005 - 00:35 #23
Og et svar
Avatar billede 1nz4n3 Nybegynder
03. september 2005 - 00:36 #24
Når jeg sætter det ind siger den at "mousePressed(java.awt.event.MouseListener) is aleredy defined  in bilSpil

bilSpil er navnet på min applet.
Avatar billede mikkelbm Nybegynder
03. september 2005 - 00:40 #25
Ja, du skal bytte rundt på navnene i de to metoder... Men ved nærmere eftertanke, så tror jeg ikke de har nogen effekt.
Avatar billede 1nz4n3 Nybegynder
03. september 2005 - 00:41 #26
Perfekt, lavede det selv.

    public void mousePressed(MouseEvent e)
{
    mouseDown = new Point((int) e.getX(), (int) e.getY());
    repaint();
}
  public void mouseCliched(MouseEvent e)
{
    mouseDown = new Point((int) e.getX(), (int) e.getY());
    repaint();
}


Endnu en gang et stort tak for din hjælp.
Er virklig glad :)
Avatar billede mikkelbm Nybegynder
03. september 2005 - 00:44 #27
Hvis din smiley altid skal følge musen, har du også den mulighed at implementere MouseMotionListener:


public class madsen extends Applet implements MouseListener, MouseMotionListener
....


Og så skal følgende to metoder implementeres:

public void mouseDragged(MouseEvent e){}
public void mouseMoved(MouseEvent e)
{
    mouseDown = new Point((int) e.getX(), (int) e.getY());
    repaint();
}
Avatar billede 1nz4n3 Nybegynder
03. september 2005 - 00:59 #28
Mikkel, hvorfor er det lige den viser hvidt i applet'n?
Man skal trykke på den først inden man kan se det?
Avatar billede mikkelbm Nybegynder
06. september 2005 - 00:10 #29
Havde overset din sidste kommentar... Men det er løst ik' ?
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