I';我正在用Java制作一个带有keyListener的精灵移动器

I';我正在用Java制作一个带有keyListener的精灵移动器,java,swing,jlabel,keylistener,Java,Swing,Jlabel,Keylistener,我正在做一个精灵移动器,但是,它似乎不起作用,有人能看一下并告诉我出了什么问题吗?它应该通过KeyListener来使用箭头键移动精灵,但是,我的移动功能只能向上移动,不能向其他方向移动,请帮助 package moving.sprite; import java.awt.Component; import java.awt.Container; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java

我正在做一个精灵移动器,但是,它似乎不起作用,有人能看一下并告诉我出了什么问题吗?它应该通过KeyListener来使用箭头键移动精灵,但是,我的移动功能只能向上移动,不能向其他方向移动,请帮助

package moving.sprite;

import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SpringLayout;


/**
 *
 * @author c
 */

public class MovingSprite implements KeyListener,
        ActionListener{

    /**
     * @param args the command line arguments
     * 
     */

    // Make a sprite movable around the window by using the arrow keys

    // Data : Used for paths for the File object

    // Stills

    private static String fstill = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Stills\\Front.png";
    private static String bstill = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Stills\\Back.png";
    private static String lstill = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Stills\\Left.png";
    private static String rstill = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Stills\\Right.png";

    //

    // Walking

    private static String fwalk = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Walking\\Front.png";
    private static String bwalk = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Walking\\Back.png";
    private static String lwalk = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Walking\\Left.png";
    private static String rwalk = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Walking\\Right.png";

    //

    // Movement position

    private static int moved = 0;
    private static int xa = 0;
    private static int ya = 0;
    private static String j;
    private static String direction;

    // 0 = front
    // 1 = back
    // 2 = left
    // 3 = right

    //

    // Gui Constructors

    private static JFrame mainframe;
    private static Container contentPane;
    private static SpringLayout layout;
    private static Component frame;
    private static BufferedImage img;
    private static ImageIcon iconb;
    private static JLabel lab;
    private static JFrame mainframeb;
    private static JButton upb;
    private static JButton downb;
    private static JButton leftb;
    private static JButton rightb;

    public static void main(String[] args) {

        runthis();


    }

    private static void messagep ( String message ) {

        JOptionPane.showMessageDialog(frame,
    message);

    }

    private static void changesprite(String pos) {

        j = pos;

        img = null;

        try {

        img = ImageIO.read(new File(j));

        } catch (IOException e) {

        }

        iconb = new ImageIcon(img, "Sprite");

        lab.setIcon(iconb);

    }

    private static void reset() {

        xa = 0;
        ya = 0;
        lab.setLocation(xa, ya);
        System.out.println("Reset!");

    }

    private static void move() {

        lab.setLocation(xa, ya);

        if ( moved == 1 ) {

            // Down, works

            changesprite(fstill);
            ya = (lab.getLocationOnScreen().y);
            xa = (lab.getLocationOnScreen().x*2*(-(1)));
            lab.setLocation(xa, ya);
            System.out.println("Down : (" + xa + " , " + ya +  " ) ");

        }

        if ( moved == 0 ) {

            // Backwards, 

            changesprite(bstill);
            ya = (lab.getLocationOnScreen().y)-2;
            xa = (lab.getLocationOnScreen().x);
            lab.setLocation(xa, ya);
            System.out.println("Up : (" + xa + " , " + ya +  " ) ");

        }

        if ( moved == 2 ) {

            changesprite(lstill);

        }

        if ( moved == 3 ) {

            changesprite(rstill);

        }

        lab.setLocation(xa, ya);

    }

    private static void runthis() {

        messagep("Disclaimer : Sprite's are originally by Nintendo, sprites were ripped by : Silentninja.");
        messagep("Program made by : c");

        mainframe = new JFrame("Fire Red Sprite");
        mainframe.setSize(100, 100);

        contentPane = mainframe.getContentPane();
        layout = new SpringLayout();


        j = fstill;

        img = null;

        try {

        img = ImageIO.read(new File(j));

        } catch (IOException e) {

        }

        iconb = new ImageIcon(img, "Sprite");

        lab = new JLabel(iconb);

        mainframe.add(lab);
        lab.setLocation(100, 100);

        mainframeb = new JFrame("Fire Red Moving");
        mainframeb.setSize(300, 70);

        upb = new JButton("Up");
        downb = new JButton("Down");
        leftb = new JButton("Left");
        rightb = new JButton("Right");

        upb.setSize(50, 50);
        downb.setSize(50, 50);
        leftb.setSize(50, 50);
        rightb.setSize(50, 50);

        mainframeb.add(upb);
        mainframeb.add(downb);
        mainframeb.add(leftb);
        mainframeb.add(rightb);

        contentPane.setLayout(layout);
        mainframe.pack();
        mainframe.setVisible(true);
        mainframeb.setLayout(new FlowLayout (FlowLayout.LEADING));
        mainframeb.setVisible(true);


        reset();

    }

    private static void directionassign() {

        if ( moved == 2 ) {

            direction = "LEFT";

        }

        if ( moved == 3 ) {

            direction = "RIGHT";

        }

        if ( moved == 1 ) {

            direction = "UP";

        }

        if ( moved == 0 ) {

            direction = "DOWN";

        }

    }

    @Override
    public void keyTyped(KeyEvent ke) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void keyPressed(KeyEvent ke) {

        if(ke.getKeyCode()  == KeyEvent.VK_LEFT) moved = 2;
        else if(ke.getKeyCode()  == KeyEvent.VK_RIGHT) moved = 3;
        else if(ke.getKeyCode()  == KeyEvent.VK_UP) moved = 1;
        else if(ke.getKeyCode()  == KeyEvent.VK_DOWN) moved = 0;

        move();
        directionassign();
        System.out.println(moved + " " + direction);

    }

    @Override
    public void keyReleased(KeyEvent ke) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        move();
    }

    private void displayInfo(KeyEvent e, String keyStatus){

        int id = e.getID();
        if (id == KeyEvent.KEY_PRESSED) {

            char c = e.getKeyChar();
            System.out.println(c);

        }

    }

}/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package moving.sprite;

import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.SpringLayout;


/**
 *
 * @author c
 */

public class MovingSprite implements KeyListener,
        ActionListener{

    /**
     * @param args the command line arguments
     * 
     */

    // Make a sprite movable around the window by using the arrow keys

    // Data : Used for paths for the File object

    // Stills

    private static String fstill = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Stills\\Front.png";
    private static String bstill = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Stills\\Back.png";
    private static String lstill = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Stills\\Left.png";
    private static String rstill = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Stills\\Right.png";

    //

    // Walking

    private static String fwalk = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Walking\\Front.png";
    private static String bwalk = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Walking\\Back.png";
    private static String lwalk = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Walking\\Left.png";
    private static String rwalk = "C:\\Users\\c\\Documents\\NetBeansProjects\\Moving Sprite\\src\\Sprite Images\\Walking\\Right.png";

    //

    // Movement position

    private static int moved = 0;
    private static int xa = 0;
    private static int ya = 0;
    private static String j;
    private static String direction;

    // 0 = front
    // 1 = back
    // 2 = left
    // 3 = right

    //

    // Gui Constructors

    private static JFrame mainframe;
    private static Container contentPane;
    private static SpringLayout layout;
    private static Component frame;
    private static BufferedImage img;
    private static ImageIcon iconb;
    private static JLabel lab;
    private static JFrame mainframeb;
    private static JButton upb;
    private static JButton downb;
    private static JButton leftb;
    private static JButton rightb;

    public static void main(String[] args) {

        runthis();


    }

    private static void messagep ( String message ) {

        JOptionPane.showMessageDialog(frame,
    message);

    }

    private static void changesprite(String pos) {

        j = pos;

        img = null;

        try {

        img = ImageIO.read(new File(j));

        } catch (IOException e) {

        }

        iconb = new ImageIcon(img, "Sprite");

        lab.setIcon(iconb);

    }

    private static void reset() {

        xa = 0;
        ya = 0;
        lab.setLocation(xa, ya);
        System.out.println("Reset!");

    }

    private static void move() {

        lab.setLocation(xa, ya);

        if ( moved == 1 ) {

            // Down, works

            changesprite(fstill);
            ya = (lab.getLocationOnScreen().y);
            xa = (lab.getLocationOnScreen().x*2*(-(1)));
            lab.setLocation(xa, ya);
            System.out.println("Down : (" + xa + " , " + ya +  " ) ");

        }

        if ( moved == 0 ) {

            // Backwards, 

            changesprite(bstill);
            ya = (lab.getLocationOnScreen().y)-2;
            xa = (lab.getLocationOnScreen().x);
            lab.setLocation(xa, ya);
            System.out.println("Up : (" + xa + " , " + ya +  " ) ");

        }

        if ( moved == 2 ) {

            changesprite(lstill);

        }

        if ( moved == 3 ) {

            changesprite(rstill);

        }

        lab.setLocation(xa, ya);

    }

    private static void runthis() {

        messagep("Disclaimer : Sprite's are originally by Nintendo, sprites were ripped by : Silentninja.");
        messagep("Program made by : c");

        mainframe = new JFrame("Fire Red Sprite");
        mainframe.setSize(100, 100);

        contentPane = mainframe.getContentPane();
        layout = new SpringLayout();


        j = fstill;

        img = null;

        try {

        img = ImageIO.read(new File(j));

        } catch (IOException e) {

        }

        iconb = new ImageIcon(img, "Sprite");

        lab = new JLabel(iconb);

        mainframe.add(lab);
        lab.setLocation(100, 100);

        mainframeb = new JFrame("Fire Red Moving");
        mainframeb.setSize(300, 70);

        upb = new JButton("Up");
        downb = new JButton("Down");
        leftb = new JButton("Left");
        rightb = new JButton("Right");

        upb.setSize(50, 50);
        downb.setSize(50, 50);
        leftb.setSize(50, 50);
        rightb.setSize(50, 50);

        mainframeb.add(upb);
        mainframeb.add(downb);
        mainframeb.add(leftb);
        mainframeb.add(rightb);

        contentPane.setLayout(layout);
        mainframe.pack();
        mainframe.setVisible(true);
        mainframeb.setLayout(new FlowLayout (FlowLayout.LEADING));
        mainframeb.setVisible(true);


        reset();

    }

    private static void directionassign() {

        if ( moved == 2 ) {

            direction = "LEFT";

        }

        if ( moved == 3 ) {

            direction = "RIGHT";

        }

        if ( moved == 1 ) {

            direction = "UP";

        }

        if ( moved == 0 ) {

            direction = "DOWN";

        }

    }

    @Override
    public void keyTyped(KeyEvent ke) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void keyPressed(KeyEvent ke) {

        if(ke.getKeyCode()  == KeyEvent.VK_LEFT) moved = 2;
        else if(ke.getKeyCode()  == KeyEvent.VK_RIGHT) moved = 3;
        else if(ke.getKeyCode()  == KeyEvent.VK_UP) moved = 1;
        else if(ke.getKeyCode()  == KeyEvent.VK_DOWN) moved = 0;

        move();
        directionassign();
        System.out.println(moved + " " + direction);

    }

    @Override
    public void keyReleased(KeyEvent ke) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        move();
    }

    private void displayInfo(KeyEvent e, String keyStatus){

        int id = e.getID();
        if (id == KeyEvent.KEY_PRESSED) {

            char c = e.getKeyChar();
            System.out.println(c);

        }

    }

}
不要使用“神奇数字”。没有人知道“1”是什么意思,在代码中可能需要引用该变量的其他地方很容易犯键入错误

private static JFrame mainframe;
private static Container contentPane;
private static SpringLayout layout;
private static Component frame;

private static void messagep ( String message ) {
除去所有静态变量和方法。这不是设计应用程序的正确方法

退房。它解释了使用KeyListener的常见问题,并提出了一种更好的方法,即使用
键绑定
。提供了工作示例

不要使用“神奇数字”。没有人知道“1”是什么意思,在代码中可能需要引用该变量的其他地方很容易犯键入错误

private static JFrame mainframe;
private static Container contentPane;
private static SpringLayout layout;
private static Component frame;

private static void messagep ( String message ) {
除去所有静态变量和方法。这不是设计应用程序的正确方法

退房。它解释了使用KeyListener的常见问题,并提出了一种更好的方法,即使用
键绑定
。提供了工作示例

不要使用“神奇数字”。没有人知道“1”是什么意思,在代码中可能需要引用该变量的其他地方很容易犯键入错误

private static JFrame mainframe;
private static Container contentPane;
private static SpringLayout layout;
private static Component frame;

private static void messagep ( String message ) {
除去所有静态变量和方法。这不是设计应用程序的正确方法

退房。它解释了使用KeyListener的常见问题,并提出了一种更好的方法,即使用
键绑定
。提供了工作示例

不要使用“神奇数字”。没有人知道“1”是什么意思,在代码中可能需要引用该变量的其他地方很容易犯键入错误

private static JFrame mainframe;
private static Container contentPane;
private static SpringLayout layout;
private static Component frame;

private static void messagep ( String message ) {
除去所有静态变量和方法。这不是设计应用程序的正确方法


退房。它解释了使用KeyListener的常见问题,并提出了一种更好的方法,即使用
键绑定
。提供了工作示例。

谢谢,我会看一看。谢谢,我会看一看。谢谢,我会看一看。谢谢,我会看一看。谢谢,我会看一看。