Przesuwanie kwadratu po ekranie

0

Witam,

Mam do napisania program, aplet, który wyświetla na ekranie kwadrat i który przesuwa się w górę, dół, lewo i prawo po naciśnięciu klawiszy na klawiaturze. Udało mi się to zrobić umieszczając na ekranie buttony, jednak chodzi o to by pobierać naciśnięty klawisz i wtedy stosować akcję:

Próbowałem w ten sposób:

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

public class przesun extends Applet
{ 
//przyciski i ich elementy 
int x1 = 300;
int y1 = 300;
int r = 20;
int c;
BufferedReader a=new BufferedReader(new InputStreamReader(System.in));
public void paint(Graphics g) 
{ 
try{
c = a.read();
}
catch(IOException e){}
//petla warunkowa wykonywana po nacisnieciu przycisku 
if (c==(int)'l') 
{ 
//lewo
setBackground( new java.awt.Color(255, 255, 255)); 
g.setColor(Color.white); 
g.drawRect(x1,y1,r,r); 
g.setColor(Color.black); 
x1 -= 5;
g.drawRect(x1,y1,r,r);
repaint(); 
} 
if (c == (int)'p') 
{ 
//prawo
setBackground( new java.awt.Color(255, 255, 255)); 
g.setColor(Color.white); 
g.drawRect(x1,y1,r,r);
g.setColor(Color.black); 
x1 += 5;
g.drawRect(x1,y1,r,r);
repaint(); 
}
if (c == (int)'g') 
{ 
//gora
setBackground( new java.awt.Color(255, 255, 255)); 
g.setColor(Color.white); 
g.drawRect(x1,y1,r,r);
g.setColor(Color.black); 
y1 -= 5;
g.drawRect(x1,y1,r,r);
repaint(); 
}
if (c == (int)'d') 
{ 
//dol
setBackground( new java.awt.Color(255, 255, 255));  
g.setColor(Color.white); 
g.drawRect(x1,y1,r,r);
g.setColor(Color.black); 
y1 += 5;
g.drawRect(x1,y1,r,r);
repaint(); 
} 
}
}

Ale nie jest to dobre rozwiązanie. Chciałbym prosić o pomoc.

Pozdrawiam

0

Obsłuż KeyEvent i użyj fillRect() zamiast drawRect()

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

public class Test extends Applet implements KeyListener
{
    //przyciski i ich elementy
    int x1 = 100;
    int y1 = 100;
    int r = 20;
    //------------------------
    public void init()
    {
        addKeyListener(this);
    }
    //------------------------
    public void paint(Graphics g)
    {
        g.setColor(Color.gray);
        g.fillRect(x1,y1,r,r);
    }
    //------------------------
    public void keyPressed(KeyEvent ke)
    {
    }
    //------------------------
    public void keyReleased(KeyEvent ke)
    {
        String txt=KeyEvent.getKeyText(ke.getKeyCode());
        if(txt.equalsIgnoreCase("Right"))
            x1+=5;
        if(txt.equalsIgnoreCase("Left"))
            x1-=5;
        if(txt.equalsIgnoreCase("Up"))
            y1-=5;
        if(txt.equalsIgnoreCase("Down"))
            y1+=5;
        repaint();
    }
    //------------------------
    public void keyTyped(KeyEvent ke)
    {
    }
}
0

dzięki za pomoc :)

0

String txt=KeyEvent.getKeyText(ke.getKeyCode());
if(txt.equalsIgnoreCase("Right"))

o kurde lol :O

0

@barman, a co konkretnie cię rozśmieszyło ?

0
        String txt=KeyEvent.getKeyText(ke.getKeyCode());
        if(txt.equalsIgnoreCase("Right"))

:-D

        if (ke.getKeyCode() == KeyEvent.VK_RIGHT)
0

Początkowo używałem tej konstrukcji

if (ke.getKeyCode() == KeyEvent.VK_RIGHT)

potem świadomie przeszedłem na tę

String txt=KeyEvent.getKeyText(ke.getKeyCode());
if(txt.equalsIgnoreCase("Right"))

bowiem nawet nie mając dostępu do dokumentacji mogę zobaczyć na ekranie, ile wynosi

KeyEvent.getKeyText(ke.getKeyCode());

i z czym to porównać. A stałą VK_??? nie dla każdego klawisza da się odgadnąć .
pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1