проблемы с Java KeyListeners… и, возможно, с самими программами

Итак, цель (в любом случае, отправная точка) этой программы - нажимать клавиши со стрелками, чтобы пули летели из середины экрана в направлении стрелки. У меня есть четыре изображения пуль, которые я создал в paint, и я использую эти два класса:

это класс, который создает и организует маркеры:

public class BulletAnimator extends JPanel implements ActionListener
{
  int startX,startY;
  boolean yAxis = false;
  boolean xAxis = false;
  Timer animator;
  String direction;


  public BulletAnimator(int sX, int sY, String d)
  {
    direction = d;

    startX = sX;
    startY = sY;

    animator = new Timer (10, this);
    animator.start();
  }

  //chooses the right picture for the right direction
  public ImageIcon chooseBulletPicture ()
  {
    String path = "bullet";

    if (direction.equals("left"))
      path += "LEFT";
    else if (direction.equals ("right"))
      path += "RIGHT";
    else if (direction.equals ("up"))
      path += "UP";
    else
      path += "DOWN";

    path += ".png";

    ImageIcon b= new ImageIcon (path);

    return b;
  }

  public void paintComponent (Graphics g)
  {
    super. paintComponent(g);

    if (startX >= 500 || startY >= 500)
      animator.stop();

    if (direction.equals ("up"))
      startY -=2;
    else if (direction.equals ("down"))
      startY +=2;
    else if (direction.equals ("right"))
      startX += 2;
    else
      startX -=2;


    chooseBulletPicture().paintIcon (this, g, startX, startY);
   }

  public void actionPerformed(ActionEvent e)
  {
    repaint ();
  }
}

и этот класс предназначен для добавления keyListeners и его тестирования:

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

public class Test extends JFrame implements KeyListener
{
  JFrame f;

  public Test ()
  {
    addKeyListener (this);
    setFocusable (true);

    f = new JFrame ();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    f.setSize(500, 500);
  }

  public void keyPressed(KeyEvent e) 
  {
    BulletAnimator s = new BulletAnimator (250, 250, "initialized---blank");

    //creates bullet w/ correct direction
    if (e.getKeyCode() == KeyEvent.VK_RIGHT )
    {
      s = new BulletAnimator (250, 250, "right");
    } 
    else if (e.getKeyCode() == KeyEvent.VK_LEFT ) 
    {
       s = new BulletAnimator (250, 250, "left"); 
    } 
    else if (e.getKeyCode() == KeyEvent.VK_UP ) 
    {
       s = new BulletAnimator (250, 250, "up");
    } 
    else if (e.getKeyCode() == KeyEvent.VK_DOWN )
    {
       s = new BulletAnimator (250, 250, "down");
    }

    System.out.println ("keyPressed method read");//checks if keyPressed method was looked at

    f.add (s);
    repaint();
  }

  public void keyReleased (KeyEvent e)
  {}
  public void keyTyped (KeyEvent e)
  {}

  public static void main (String [] args)
  {
    Test t = new Test ();
  }
}

Как вы можете видеть, я попытался провести тест, который говорит "keyPressed method read" ... когда программа запускается, она не печатает. На самом деле вообще ничего не происходит, это просто серый экран ... на самом деле довольно неприятно. Что ж, заранее спасибо, если вы нашли время, чтобы посмотреть на это, я был бы очень признателен за любой совет!

0
задан hmw 6 December 2011 в 02:01
поделиться