Agent Smith
Agent Smith

Reputation: 35

The Key Listener Is not working properly

I made the Card Layout Working completely fine but what happened now is I added a keylistener to the object character which is a JLabel so whenever the person presses up the character should move up but it does absolutely nothing!

I also tried replacing it with a button which moves it when clicked and it worked completely fine. Also I tried changing the event meaning I changed that if they press up then the image of the town map would change but still no effect so it seems there is something wrong with my KeyListener

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.*;
import javax.swing.*;


@SuppressWarnings({ "unused", "serial" })
public class FinalBlowzXC extends JFrame implements KeyListener{

    public static JPanel game=new JPanel();
    public static JPanel mainmenu=new JPanel(null);
    public static JPanel loginpanel=new JPanel(null);
    public static JPanel tutorial=new JPanel(null);
    public static JPanel registration=new JPanel(null);
    public static JPanel town_map=new JPanel(null);
    public JTextField username= new JTextField("Username");
    public JTextField password=new JTextField("Password");
    public  JLabel bglogin=new JLabel();
    public JLabel character=new JLabel();
    public  JButton log_in=new JButton();
    public  JButton register=new JButton();
    CardLayout page= new CardLayout();
    public String level="";
    public int charx=350;
    public int chary=435;

    public static void main(String []args)
    {
        new FinalBlowzXC().setVisible(true);
    }

    public FinalBlowzXC()
    {
        super("Final Blowz Xchanged");
        setSize(640,510);
        setResizable(false);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        game.setLayout(page);
        game.add(mainmenu, "1");
        game.add(loginpanel, "2");
        game.add(tutorial, "3");
        game.add(registration, "4");
        game.add(town_map, "5");
        add(game);
        opening();
    }

        public void opening()
        {
            page.show(game, "1");
            JLabel bgmainmenu;
            JButton start;
            JButton exit;
            bgmainmenu = new JLabel();
            start = new JButton();
            exit = new JButton();

            bgmainmenu.setIcon(new ImageIcon(getClass().getResource("/FF-XV.jpg")));
            bgmainmenu.setBounds(0,0,640,480);
            mainmenu.add(bgmainmenu);
            mainmenu.add(start);
            start.setBounds(280, 360, 70, 20);
            start.setBorder(null);
            start.setBorderPainted(false);
            start.setContentAreaFilled(false);
            start.setOpaque(false);
            start.addActionListener(new Start());
            exit.setBounds(280, 385, 70, 20);
            mainmenu.add(exit);
            exit.setBorder(null);
            exit.setBorderPainted(false);
            exit.setContentAreaFilled(false);
            exit.setOpaque(false);
            exit.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e)
                {
                    System.exit(0);
                }
            });
        }


        class Start implements ActionListener{

        public void actionPerformed(ActionEvent e) {    
                login();

        }

    }

        public void login()
        {
            page.show(game, "2");

            bglogin.setIcon(new ImageIcon(getClass().getResource("/FF-XV Login.jpg")));
            bglogin.setBounds(0, 0, 640, 480);


            username.setBounds(300, 285, 85, 15);
            username.setBorder(null);
            username.setForeground(Color.WHITE);
            username.setOpaque(false);

            password.setBounds(300, 310, 85, 20);
            password.setBorder(null);
            password.setForeground(Color.WHITE);
            password.setOpaque(false);

            log_in.setBounds(280, 335, 50, 45);
            log_in.setBorder(null);
            log_in.setBorderPainted(false);
            log_in.setContentAreaFilled(false);
            log_in.setOpaque(false);
            log_in.addActionListener(new Log_in());

            register.setBounds(335, 335, 55, 45);
            register.setBorder(null);
            register.setBorderPainted(false);
            register.setContentAreaFilled(false);
            register.setOpaque(false);
            register.addActionListener(new Register());

            loginpanel.add(username);
            loginpanel.add(password);
            loginpanel.add(bglogin);
            loginpanel.add(log_in);
            loginpanel.add(register);
        }

        class Log_in implements ActionListener{

            public void actionPerformed(ActionEvent e) 
            {
                Tutorial();

            }

        }

        class Register implements ActionListener{

            public void actionPerformed(ActionEvent e)
            {
                page.show(game, "4");
            }
        }

        public void Tutorial()
        {
            page.show(game, "3");
            JLabel bgtutorial=new JLabel();
            JLabel animeforward=new JLabel();
            JLabel animeright=new JLabel();
            JLabel animeleft=new JLabel();
            JButton next=new JButton();
            JLabel animebackward=new JLabel();
            bgtutorial.setIcon(new ImageIcon(getClass().getResource("/FF-XV Tutorial.jpg")));
            bgtutorial.setBounds(0, 0, 640, 480);
            animeforward.setIcon(new ImageIcon(getClass().getResource("walkanimofficialfront.gif")));
            animeforward.setBounds(115, 230, 30, 30);
            animeright.setIcon(new ImageIcon(getClass().getResource("walkanimofficialright.gif")));
            animeright.setBounds(190, 315, 30, 30);
            animeleft.setIcon(new ImageIcon(getClass().getResource("walkanimofficialleft.gif")));
            animeleft.setBounds(45, 315, 30, 30);
            animebackward.setIcon(new ImageIcon(getClass().getResource("walkanimofficialback.gif")));
            animebackward.setBounds(115, 405, 30, 30);
            next.setBounds(530, 430, 100, 30);
            next.setBorder(null);
            next.setBorderPainted(false);
            next.setContentAreaFilled(false);
            next.setOpaque(false);
            next.addActionListener(new Next());
            tutorial.add(next);
            tutorial.add(animeright);
            tutorial.add(animeleft);
            tutorial.add(animebackward);
            tutorial.add(animeforward);
            tutorial.add(bgtutorial);

        }

        class Next implements ActionListener{

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

        public void town()
        {
            page.show(game, "5");
            JLabel map=new JLabel();
            map.setIcon(new ImageIcon(getClass().getResource("/FF-XV Town.jpg")));
            map.setBounds(0, 0, 640, 480);
            character.setIcon(new  ImageIcon(getClass().getResource("standfront.png")));
            character.setBounds(charx, chary, 30, 35);
            town_map.add(character);
            town_map.add(map);

        }   


        public void keyPressed(KeyEvent e) {
            if(e.getKeyCode()==KeyEvent.VK_UP)
            {
                character.setIcon(new ImageIcon(getClass().getResource("walkanimofficialfront.gif")));
                character.setLocation(character.getX(), character.getY()+5);
            }

            if(e.getKeyCode()==KeyEvent.VK_RIGHT)
            {
                character.setIcon(new ImageIcon(getClass().getResource("walkanimofficialright.gif")));
                character.setLocation(character.getX()+5, character.getY());
            }

            if(e.getKeyCode()==KeyEvent.VK_LEFT)
            {
                character.setIcon(new ImageIcon(getClass().getResource("walkanimofficialleft.gif")));
                character.setLocation(character.getX()-5, character.getY()+5);
            }

            if(e.getKeyCode()==KeyEvent.VK_DOWN)
            {
                character.setIcon(new ImageIcon(getClass().getResource("walkanimofficialback.gif")));
                character.setLocation(character.getX(), character.getY()-5);
            }

        }


        public void keyReleased(KeyEvent e) {


        }

        public void keyTyped(KeyEvent e) {


        }
}

Upvotes: 0

Views: 66

Answers (1)

camickr
camickr

Reputation: 324108

it seems there is something wrong with my KeyListener

A KeyEvent is only generated for the component with focus. A JLabel is not focusable by default so it will never receive any events.

Don't use a KeyListener.

Instead you should be using Key Bindings.

See Motion Using the Keyboard for working examples of using Key Bindings that does exactly what you want.

Upvotes: 1

Related Questions