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) {} }
Annonceindlæg tema
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"); .... }
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.
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);
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?
02. september 2005 - 23:47
#5
Så bliver du selv nødt til at regne center ud: int center = (this.getWidth() / 2);
02. september 2005 - 23:47
#6
2 minutter... Jeg finder lige et eksempel på hvordan det kan gøres rigtigt.
02. september 2005 - 23:48
#7
Okay.
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);
02. september 2005 - 23:55
#9
int textWidth = bufferGfx.getFontMetrics().stringWidth(brugernavn); siger den '.class' expeted, hvad mener den?
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); }
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?
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.
02. september 2005 - 23:59
#13
Skal siges det kun er når man klikker til siderne.
03. september 2005 - 00:00
#14
int appletWidth = this.getWidth(); det jo applet'ns skal det ikke være selve "figur.gif" ?
03. september 2005 - 00:01
#15
Det er for du bruger mouseDown.y+70 - den varierer jo alt efter hvor musen er...
03. september 2005 - 00:02
#16
Det kommer an på hvad du vil? Jeg er ikke helt med længere...
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!
03. september 2005 - 00:15
#18
Det kræver du lige trykker engang på applet'n da den underligt bare viser hvid i starten :´/
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)
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);
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"
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.
03. september 2005 - 00:35
#23
Og et svar
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.
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.
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 :)
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(); }
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?
06. september 2005 - 00:10
#29
Havde overset din sidste kommentar... Men det er løst ik' ?
Kurser inden for grundlæggende programmering