03. september 2005 - 00:45Der er
16 kommentarer og 1 løsning
Java: Dele op i tabeller.
I HTML er der noget som hedder tabeller.
Hvordan laver jeg via. java et kordinat system som gør hvis man klikker inde i den "tabel" så kommer man derhen fremfor man kan klikke overalt på hele skærmen?
Altså det nuværdene system jeg har gør man kan klikke rundt som en gal i hele vinduet - selv udenfor.
Hvordan laver jeg fx. en while sætning som laver 10 retangler foroven og 5 på den anden også skal den gentage "while" functionen 5 gange.
public void paint(Graphics g) { bufferGfx.clearRect(0,0,this.getWidth(),this.getHeight()); bufferGfx.drawImage(baggrund,0,0,this); paintRectangles (bufferGfx);
if (mouseDown != null) { int textWidth = bufferGfx.getFontMetrics().stringWidth(brugernavn); int smileyX = mouseDown.x; int x = smileyX - (textWidth / 2); bufferGfx.setColor (Color.black); bufferGfx.drawString(brugernavn, x, mouseDown.y+70); bufferGfx.drawImage(figur, mouseDown.x-40, mouseDown.y-15, this); }
g.drawImage(offScreen,0,0,this); }
private void paintRectangles(Graphics g) { g.setColor(Color.red); for (int i = 0; i<rectangles.length; i++) g.drawRect(rectangles[i].x, rectangles[i].y, rectangles[i].width, rectangles[i].height); }
private boolean detectCollision (int x, int y) { for (int i = 0; i<rectangles.length; i++) if (x >= rectangles[i].x && x <= (rectangles[i].x + rectangles[i].width) && y >= rectangles[i].y && y <= (rectangles[i].y + rectangles[i].height)) return true;
return false; }
public void mousePressed(MouseEvent e) { if (detectCollision(e.getX(), e.getY())) mouseDown = new Point((int) e.getX(), (int) e.getY()); repaint(); } public void mouseCliched(MouseEvent e) { if (detectCollision (e.getX(), e.getY())) mouseDown = new Point((int) e.getX(), (int) e.getY()); repaint(); }
public void update (Graphics g) { paint (g); }
public void mouseClicked(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} }
Du nævnte i et tidligere spørgsmål, at du skulle trykke på applet'en før den blev vist. Grunden til det var der hvor vi beregnede tekstlængden. Der skulle lige et tjek ind.
public class bilSpil extends Applet implements MouseListener { Image figur; Image offScreen; Graphics bufferGfx; Image baggrund; Point mouseDown = null; String brugernavn; ArrayList rectangles; private static final int numberOfRows = 5; private static final int numberInSmall = 4; private static final int recSize = 20; private static final int spaceBetween = recSize * 2;
public void init() { this.setSize(300, 300); rectangles = new ArrayList();
for (int i = 0; i < numberOfRows; i++) { for (int j = 0; j < numberInSmall + ((i % 2) == 0 ? 1 : 0); j++) { int recX = spaceBetween + spaceBetween * j + ((i % 2) == 1 ? (spaceBetween / 2) : 0); int recY = spaceBetween + spaceBetween * i;
public void paint(Graphics g) { bufferGfx.clearRect(0,0,this.getWidth(),this.getHeight()); bufferGfx.drawImage(baggrund,0,0,this); paintRectangles (bufferGfx);
if (mouseDown != null) { int textWidth = bufferGfx.getFontMetrics().stringWidth(brugernavn); int smileyX = mouseDown.x; int x = smileyX - (textWidth / 2); bufferGfx.setColor (Color.black); bufferGfx.drawString(brugernavn, x, mouseDown.y+70); bufferGfx.drawImage(figur, mouseDown.x-40, mouseDown.y-15, this); }
g.drawImage(offScreen,0,0,this); }
private void paintRectangles(Graphics g) { for (int i = 0; i<rectangles.size(); i++) { MyRectangle rec = (MyRectangle)rectangles.get(i); Color col = rec.getIsClicked() ? Color.red : Color.green; g.setColor(col); g.drawRect(rec.x, rec.y, rec.width, rec.height); } }
private boolean detectCollision (int x, int y) { for (int i = 0; i<rectangles.size(); i++) { MyRectangle rec = (MyRectangle)rectangles.get(i); if (x >= rec.x && x <= (rec.x + rec.width) && y >= rec.y && y <= (rec.y + rec.height)) { if (!rec.getIsClicked()) // Hvis man allerede har trykket på den må man ikke igen { rec.setIsClicked(true); // Hvis man rammer, må man ikke igen return true; } } }
return false; }
public void mousePressed(MouseEvent e) { if (detectCollision(e.getX(), e.getY())) mouseDown = new Point((int) e.getX(), (int) e.getY()); repaint(); } public void mouseCliched(MouseEvent e) { if (detectCollision (e.getX(), e.getY())) mouseDown = new Point((int) e.getX(), (int) e.getY()); repaint(); }
public void update (Graphics g) { paint (g); }
public void mouseClicked(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {}
Men man skal jo også kunne flytte sig tilbage. Den skal kun være rød hvis man selv er på det og hvis man så flytter sig bliver den grøn igen og det nye felt bliver rødt.
private boolean detectCollision (int x, int y) { boolean collision = false; for (int i = 0; i<rectangles.size(); i++) { MyRectangle rec = (MyRectangle)rectangles.get(i); if (x >= rec.x && x <= (rec.x + rec.width) && y >= rec.y && y <= (rec.y + rec.height)) { if (!rec.getIsClicked()) // Hvis man allerede har trykket på den må man ikke igen { rec.setIsClicked(true); // Hvis man rammer, må man ikke igen collision = true; } } else rec.setIsClicked(false); }
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.