2017-01-03 2 views
0

Я сделал макет карты Работа полностью прекрасна, но теперь я добавил ключевого слова для символа объекта, который является JLabel, поэтому всякий раз, когда человек нажимает на персонажа, он должен двигаться вверх, но он абсолютно ничего!Ключ-прослушиватель не работает должным образом

Я также попытался заменить его кнопкой, которая перемещает его при нажатии, и все работает отлично. Кроме того, я попытался изменить событие, означающее я изменился, что, если они давят на то изображение карты города изменится, но до сих пор никакого эффекта, так что, кажется, есть что-то не так с моей 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) { 


     } 
} 

ответ

1

кажется, что есть что-то не так с моим KeyListener

KeyEvent генерируется только для компонента с фокусом. По умолчанию JLabel не настраивается, поэтому он никогда не получит никаких событий.

Не используйте KeyListener.

Вместо этого вы должны использовать Key Bindings.

См. Motion Using the Keyboard для рабочих примеров использования Key Bindings, который выполняет именно то, что вы хотите.

+0

Я пробовал учиться, но не смог понять, а также у меня мало времени, так как скоро это произойдет, так что есть способ использовать прослушиватель клавиш, чтобы переместить ярлык, сосредоточив его или так? –

+0

@AgentSmith, я дал вам рабочие примеры, используя оба подхода. – camickr

+0

Получил мою ошибку спасибо !!! –

Смежные вопросы