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
4 svar · 238 visningar · startad av nill
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();
}
}
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
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?
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
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)