Smooth animation

I’m not sure what is wrong with my animation. It was smooth, now it’s not, I only have two classes here. Is it something to do with my delay or is it something to do with how I’m using spritemanager.getSprite();

package tiledgame;

import java.awt.Point;
import java.util.Map;
import org.newdawn.slick.Image;
import org.newdawn.slick.SpriteSheet;

/**
 * @author HadesVine
 */
public class CharacterEntity {
    public static final int UP = 0;
    public static final int RIGHT = 1;
    public static final int DOWN = 2;
    public static final int LEFT = 3;
    public static final int IDLE = 0;
    public static final int WALK = 1;
    
    private SpriteSheet spriteSheet;
    private int facing = 0;//The direction a sprite is facing;
    private int state = 0;
    private float locationX;
    private float locationY;
    private int walkDelay = 200;
    private int currentFrame = 0;
    private int timePassed = 0;
    private int walkColumn = 0;

    public CharacterEntity(SpriteSheet spriteSheet, float locationX, float locationY) {
        this.spriteSheet = spriteSheet;
        this.locationX = locationX;
        this.locationY = locationY;
    }

    public int getFacing() {
        return facing;
    }

    public void setFacing(int facing) {
        this.facing = facing;
    }

    public float getLocationX() {
        return locationX;
    }

    public void setLocationX(float locationX) {
        this.locationX = locationX;
    }

    public float getLocationY() {
        return locationY;
    }

    public void setLocationY(float locationY) {
        this.locationY = locationY;
    }

    public void setState(int state) {
        this.state = state;
    }

    public int getState() {
        return state;
    }

    public int getWalkDelay() {
        return walkDelay;
    }

    public void setWalkDelay(int walkDelay) {
        this.walkDelay = walkDelay;
    }
    

    public int getWalkColumn() {
        return walkColumn;
    }

    public void setWalkColumn(int walkColumn) {
        this.walkColumn = walkColumn;
    }

    public void tick(int delta) {
        if (this.state == WALK) {
            if (timePassed >= walkDelay) {
                timePassed = 0;
                if (this.currentFrame == 1) {
                    this.currentFrame = -1;
                } else {
                    this.currentFrame = 1;
                }
            } else {
                timePassed += delta;
            }
        }else{
            currentFrame = 0;
        }
    }
    public Image getSprite() {
        return this.spriteSheet.getSprite(this.currentFrame + this.walkColumn, this.facing);
    }
}
package tiledgame;

import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.SpriteSheet;

/**
 * @author HadesVine
 */
public class TiledGame extends BasicGame {

    private GameContainer gc;
    private float moveSpeed = 1;
    private CharacterEntity testEntity;
    private boolean playerIsMoving = false;

    public TiledGame() {
        super("Tiled game");
    }

    public static void main(String[] args) throws SlickException {
        AppGameContainer app = new AppGameContainer(new TiledGame());
        app.setDisplayMode(1024, 768, false);
        app.start();
    }

    @Override
    public void init(GameContainer gc) throws SlickException {
        testEntity = new CharacterEntity(new SpriteSheet("com/hadesvine/tilegame/tiles/crono.png", 24, 32), 400, 300);
        testEntity.setWalkColumn(4);
        testEntity.setWalkDelay(200);
    }

    @Override
    public void update(GameContainer gc, int delta) throws SlickException {
        playerIsMoving = false;
        Input input = gc.getInput();
        float rate = delta / 10;
        if (input.isKeyDown(Input.KEY_W)) {
            testEntity.setFacing(CharacterEntity.UP);
            testEntity.setLocationY(testEntity.getLocationY() - moveSpeed * rate);
            playerIsMoving = true;
        }
        if (input.isKeyDown(Input.KEY_D)) {
            testEntity.setFacing(CharacterEntity.RIGHT);
            testEntity.setLocationX(testEntity.getLocationX() + moveSpeed * rate);
            playerIsMoving = true;
        }
        if (input.isKeyDown(Input.KEY_S)) {
            testEntity.setFacing(CharacterEntity.DOWN);
            testEntity.setLocationY(testEntity.getLocationY() + moveSpeed * rate);
            playerIsMoving = true;
        }
        if (input.isKeyDown(Input.KEY_A)) {
            testEntity.setFacing(CharacterEntity.LEFT);
            testEntity.setLocationX(testEntity.getLocationX() - moveSpeed * rate);
            playerIsMoving = true;
        }
        if (input.isKeyDown(Input.KEY_2)) {
            if (moveSpeed != 500) {
                moveSpeed += 1;
            }
        }
        if (input.isKeyDown(Input.KEY_1)) {
            if (moveSpeed > 1) {
                moveSpeed -= 1;
            }
        }
        if (input.isKeyDown(Input.KEY_3)) {
            if (moveSpeed > 1) {
                moveSpeed = 1;
            }
        }
        if (playerIsMoving) {
            testEntity.setState(CharacterEntity.WALK);
        } else {
            testEntity.setState(CharacterEntity.IDLE);
        }
        testEntity.tick(delta);
    }

    @Override
    public void render(GameContainer gc, Graphics g) throws SlickException {
        testEntity.getSprite().draw(testEntity.getLocationX(), testEntity.getLocationY());
    }
}

Any help would be appreciated.