2017-01-03 125 views
0

我所做的卡布局工作完全正常,但現在發生了什麼事是我添加了一個KeyListener的到這是一個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

用於工作使用Key Bindings,你想要做什麼的例子見Motion Using the Keyboard

+0

我想學習,但無法理解,我也沒有太多的時間,因爲它是由於很快所以有使用密鑰聽衆通過集中它左右移動標籤的方式? –

+0

@AgentSmith,我給你使用了兩種方法的實例。 – camickr

+0

得到了我的錯誤感謝! –

相關問題