2011-07-06 49 views
1

我想給法師類從JLabel的擴展,並實現KeyListner進去,但keyListner不工作 現在MouseListner工作,但KeyListner不工作,爲什麼??? 和另一個問題是,當JFrame的setLayout的爲空,它不顯示(圖像汽車或汽車對象);添加的KeyListener到的JLabel

 
    public class car extends JLabel implements KeyListener,MouseListener{ 
     private ImageIcon imgico;//to set Image icon of car 
     public car(int car_num,boolean line1,Dimension position){ 
      //car_num variable check which of Image of car load 
      //if line1 is true .line 1 else car load in line 2 
      super(); 
      this.imgico = this.car_load(car_num, line1); 
      super.setIcon(this.imgico); 
      super.setVisible(true); 
      super.setSize(this.imgico.getIconWidth(),this.imgico.getIconHeight()); 
      super.setLocation(position.width, position.height); 
      this.addKeyListener(this); 
      this.addMouseListener(this); 

     } 
     private ImageIcon car_load(int car_num,boolean line1){ 
      //load image icon of car 
      if (car_num == 1 && line1 == true) 
       return (new ImageIcon("Images/cars/01a.PNG")); 
      else if (car_num == 1 && line1 == false) 
       return (new ImageIcon("Images/cars/01b.PNG")); 
      else if (car_num == 2 && line1 == true) 
       return (new ImageIcon("Images/cars/02a.PNG")); 
      else if (car_num == 2 && line1 == false) 
       return (new ImageIcon("Images/cars/02b.PNG")); 
      else if (car_num == 3 && line1 == true) 
       return (new ImageIcon("Images/cars/03a.PNG")); 
      else if (car_num == 3 && line1 == false) 
       return (new ImageIcon("Images/cars/03b.PNG")); 
      else if (car_num == 4 && line1 == true) 
       return (new ImageIcon("Images/cars/04a.PNG")); 
      else if (car_num == 4 && line1 == false) 
       return (new ImageIcon("Images/cars/04b.PNG")); 
      else if (car_num == 5 && line1 == true) 
       return (new ImageIcon("Images/cars/05a.PNG")); 
      else if (car_num == 5 && line1 == false) 
       return (new ImageIcon("Images/cars/05b.PNG")); 
      else if (car_num == 6 && line1 == true) 
       return (new ImageIcon("Images/cars/06a.PNG")); 
      else 
       return (new ImageIcon("Images/cars/06b.PNG")); 
      // by deafult its 06b 
     } 
     @Override 
     public void keyPressed(KeyEvent arg0) { 
      // TODO Auto-generated method stub 
      System.out.println(arg0.getKeyCode()); 
     } 
     @Override 
     public void keyReleased(KeyEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void keyTyped(KeyEvent arg0) { 
      // TODO Auto-generated method stub 
      System.out.println(arg0.getKeyCode()); 

     } 
     @Override 
     public void mouseClicked(MouseEvent arg0) { 
      if (arg0.getSource() == this) 
       System.out.println("Hi"); 
     } 
     @Override 
     public void mouseEntered(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mouseExited(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mousePressed(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mouseReleased(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
    } 

在主

 
    JFrame x = new JFrame(); 
    x.setSize(500,500); 
    x.setVisible(true); 
    Dimension v = new Dimension(5,5); 
    car t =new car(1,true,v); 
    x.setLayout(null); 
    x.add(t); 
+0

你應該接受一些答案。 – StanislavL

回答

6

我不認爲JLabel可以獲得焦點,因此KeyEvent永遠不會被解僱。有關更多詳細信息,請參閱此documentation