---
title: "paint(Graphics g) och Keyadapter"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/65831-paint-graphics-g-och-keyadapter"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "nill"
published: "2003-01-22T18:41:57.000Z"
updated: "2003-01-22T22:39:39.000Z"
replies: 4
views: 245
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/65831-paint-graphics-g-och-keyadapter"
---

# paint(Graphics g) och Keyadapter

## #1 — nill, 2003-01-22T18:41Z

Nybörjare på java men har tagit åt mig uppgiften att kunna styra en bil (röd rektangel) på en väg. 
Grafiken får jag att fungera samt att lyssna på tangentbordet. Men hur jag kombinerar de två går utöver mina kunskaper.  Här är koden jag jobbar med:

```
import java.awt.*;
import java.awt.event.*;
import java.io.*;
//import java.util.*;

class Uppg8x extends Frame
{

private Graphics g;

public Uppg8x() {
//Fönsterinställningar
setBounds(50,50, 300, 400);
setBackground(Color.blue);

myKeyListener keyHandler = new myKeyListener(this);
this.addKeyListener(keyHandler);

}

public void paint(Graphics g) {

g.setColor(Color.red);
g.drawString("100px", 100, 100);
g.setColor(Color.yellow);
g.fillOval(-10,-10,100,100);
g.drawLine(20,50,35,120);
g.drawLine(0,0,100,100);
g.drawLine(20,20,115,70);
g.setColor(Color.green);
g.fillRect(0,220,300, 180);
g.fillOval(175, 130, 70, 70);
g.setColor(Color.yellow);
g.fillRect(200,200,20, 50);
g.setColor(Color.black);
g.fillRect(50,180,120, 80);
g.setColor(Color.white);
g.fillRect(80,220,10, 10);
g.fillRect(140,220,10, 10);
g.setColor(Color.black);
g.fillRect(0,280,300,100);
for (int i = 0;i < 100;i = i + 20)
ritaBil(g, i, 0);

}
public void ritaBil(Graphics g, int x, int y){
g.setColor(Color.red);
g.fillRect(200-x,300-y, 50, 30);
}

public void rita(){
paint(g);
}

//public void ritaBil(){
// System.out.println("hej");
//}

public static void main (String[] args)throws IOException
{
Uppg8x frame = new Uppg8x();
frame.setBounds(50,50, 300, 400);
frame.setVisible(true);
}

}
class myKeyListener extends KeyAdapter{
  Uppg8x thisObject;

  myKeyListener(Uppg8x thisObjectIn){//constructor
    thisObject = thisObjectIn;
  }//end constructor

public void keyPressed(KeyEvent e){

System.out.println("Tangent: " +e.getKeyChar());
thisObject.rita();

}

}
```

Permalänk: https://www.webforum.nu/p/65831

## #2 — PeW, 2003-01-22T21:29Z

Genom myKeyListener kan du avläsa vilka tangenter som trycks ned och därmed lägga in lite kod för att ändra x och y. 

```
if(e.getKeyCode() == KeyEvent.VK_Z) { setY(_less_); }
if(e.getKeyCode() == KeyEvent.VK_M) { setY(_more_); }

... osv
```

Permalänk: https://www.webforum.nu/p/925045

## #3 — nill, 2003-01-22T22:18Z

ja jo det förstår jag. Men jag förstår inte hur jag kan få grafiken att rita om sig:    paint-metoden anropas ju aldrig. Den bara utförs när programmet startas.  Hur ska jag då kunna ändra något i den andra klassen. Jag måste ju anropa metoden på något sätt. Men den ska ju inte anropas?

Permalänk: https://www.webforum.nu/p/925085

## #4 — PeW, 2003-01-22T22:35Z

Du bör ärva ned lite tråd-funktionalitet från Runnable och låta metoden Run arbeta :)  

Ex: <http://java.sun.com/docs/books/tutorial/essential/threads/clock.html>

Permalänk: https://www.webforum.nu/p/925097

## #5 — ps, 2003-01-22T22:39Z

Låt säga att metoden setX(MOVE_LEFT) körs, då ändrar du några värden för bilen som gör att den nästa gång den ritas upp har flyttat sig några pixlar till vänster. För att uppdateringen sen ska synas så kör du repaint() sist i metoden setX(MOVE_LEFT) så uppdateras hela kitet (dvs det som du har i metoden paint(Graphics g) körs)

Permalänk: https://www.webforum.nu/p/925104

---

Tråden på webben: https://www.webforum.nu/amne/java/65831-paint-graphics-g-och-keyadapter
