oprogramowanie strzalek klawiatury

0

Witam,

Mam program, ktory wyswietla kwadrat i za pomoca odpowiednich metod przesuwa
go w dol, gore, prawo lewo. Niestety za kazdym razem musze te metody
wywolywac recznie, jak powiazac je ze strzalkami klawiatury? Znaczy klikam
prawa strzalke na klawiaturze i automatycznie wywolywana jest metoda
przesunWPrawo() ?

Pozdrawiam

0

Ja to robie tak:

 public boolean Klawisze (Event e, int key)
{
      if (key == Event.LEFT)
      {
            //i tutaj to co ma sie dziac po wcisnieciu lewej strzalki
      }
      else if (key == Event.RIGHT)
      {
            //tu cos co bedzie smigac po wcisnieciu prawje strzalki
      }
      return true;
}
0

cos mi to nie dziala, tam zadnego pakietu nie trzeba zaimportowac? Tworze nowy obiekt kwadrat, wywoluje ta metode i pyta sie o parametry... Wpisuje mu np. przesunWPrawo() i RIGHT i nic sie nie dzieje

0

moze po prostu nie przerysowujesz ekranu po przesunieciu

0

Ja bym to zrobił tak:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Main extends JFrame{
	private Pixel pix;
	public Main() {
		super("Pixel");
		this.setSize(300,300);
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.getContentPane().setLayout(new BorderLayout());

		pix = new Pixel();
		this.addKeyListener(pix.getControl());
		this.getContentPane().add(BorderLayout.CENTER, pix);


		this.setVisible(true);
	}

	public static void main(String[] args) {
		try {
			new Main();
		}catch(Exception e) {
			e.printStackTrace();
			System.exit(-1);
		}
	}
}

class Pixel extends JPanel {
	private int pixel_size = 10;
	private Point p;
	private KeyListener listener;

	public Pixel() {
		super();
		p = new Point(0, 0);
		setOpaque(false);

		listener = new KeyboardControl();
	}

	public KeyListener getControl() {
		return listener;
	}

	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, getSize().width, getSize().height);
		paintPixel(g);
	}
	private void paintPixel(Graphics g) {
		g.setColor(new Color(0x800000));
		g.fillRect(p.x, p.y, pixel_size, pixel_size);
	}

	private class KeyboardControl implements KeyListener {
		int x,y;
		public void keyPressed(KeyEvent e) {

			switch(e.getKeyCode()) {
				case KeyEvent.VK_LEFT:
					x = p.x;
					x-= pixel_size;
					if(x<0) x = 0;
					p = new Point(x, p.y);
					repaint(p.x-pixel_size, p.y - pixel_size, pixel_size*3, pixel_size*3);
				break;

				case KeyEvent.VK_RIGHT:
					x = p.x;
					x+= pixel_size;
					if(x > getSize().width-pixel_size) x=getSize().width-pixel_size;
					p = new Point(x, p.y);
					repaint(p.x-pixel_size, p.y - pixel_size, pixel_size*3, pixel_size*3);
				break;

				case KeyEvent.VK_UP:
					y= p.y;
					y-= pixel_size;
					if(y<0) y = 0;
					p = new Point(p.x, y);
					repaint(p.x-pixel_size, p.y - pixel_size, pixel_size*3, pixel_size*3);
				break;

				case KeyEvent.VK_DOWN:
					y= p.y;
					y+= pixel_size;
					if(y>getSize().height-pixel_size) y = getSize().height-pixel_size;
					p = new Point(p.x, y);
					repaint(p.x-pixel_size, p.y - pixel_size, pixel_size*3, pixel_size*3);
				break;
			}
		}
		public void keyReleased(KeyEvent e) {}
		public void keyTyped(KeyEvent e) {}
	}
}

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