2015-05-18 32 views
1
class Card31 extends JPanel implements KeyListener, MouseListener { 
    public Card31() { 
     addKeyListener(this); 
     addMouseListener(this); 
     x1 = 700; 

    } 

    public void keyPressed(KeyEvent e) { 

    } 

    public void keyReleased(KeyEvent e) 

    { 

    } 

    public void keyTyped(KeyEvent e) 

    { 

     key = e.getKeyCode(); 
     if (key == KeyEvent.VK_RIGHT) 
      x1 += 10; 
     else if (key == KeyEvent.VK_LEFT) 
      x1 -= 10; 
     repaint(); 
    } 
    public void mouseEntered(MouseEvent e) { 
     requestFocus(); 
    } 

    public void mouseExited(MouseEvent e) {} 
    public void mousePressed(MouseEvent e) {} 
    public void mouseReleased(MouseEvent e) {} 

    public void mouseClicked(MouseEvent e) { 

    } 
    public void mouseClicked(MouseEvent e) { 

    } 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     court2 = Toolkit.getDefaultToolkit().getImage("court2.jpg"); 
     bhoop = Toolkit.getDefaultToolkit().getImage("bhoop2.png"); 
     balla = Toolkit.getDefaultToolkit().getImage("balla.png"); 
     ballc = Toolkit.getDefaultToolkit().getImage("ballc.png"); 
     balld = Toolkit.getDefaultToolkit().getImage("balld.png"); 
     balle = Toolkit.getDefaultToolkit().getImage("balle.png"); 
     ballf = Toolkit.getDefaultToolkit().getImage("ballf.png"); 
     balli = Toolkit.getDefaultToolkit().getImage("balli.png"); 
     balll = Toolkit.getDefaultToolkit().getImage("balll.png"); 
     balln = Toolkit.getDefaultToolkit().getImage("balln.png"); 
     ballo = Toolkit.getDefaultToolkit().getImage("ballo.png"); 
     ballr = Toolkit.getDefaultToolkit().getImage("ballr.png"); 
     balls = Toolkit.getDefaultToolkit().getImage("balls.png"); 
     ballt = Toolkit.getDefaultToolkit().getImage("ballt.png"); 
     ballu = Toolkit.getDefaultToolkit().getImage("ballu.png"); 
     bally = Toolkit.getDefaultToolkit().getImage("bally.png"); 
     g.drawImage(court2, 0, 0, 1600, 1000, this); 
     g.drawImage(ballo, 130, 100, 110, 110, this); 
     g.drawImage(ballc, 280, 100, 110, 110, this); 
     g.drawImage(balln, 430, 100, 110, 110, this); 
     g.drawImage(balld, 580, 100, 110, 110, this); 
     g.drawImage(balle, 730, 100, 110, 110, this); 
     g.drawImage(ballc, 880, 100, 110, 110, this); 
     g.drawImage(balle, 1030, 100, 110, 110, this); 
     g.drawImage(ballu, 1180, 100, 110, 110, this); 
     g.drawImage(bally, 1330, 100, 110, 110, this); 
     g.drawRect(30, 30, 80, 20); 
     Font plainfont = new Font("Serif", Font.BOLD, 20); 
     g.setFont(plainfont); 
     g.setColor(Color.BLACK); 
     g.drawString("Score: " + score1, 30, 30); 
     g.fillRect(700, 800, 200, 20); 
     g.drawImage(bhoop, x1, 500, 150, 150, this); 

     g.drawString(msg1, 200, 200); 
     System.out.println("x1" + x1); 
    } 
} 

上面我附加了一部分代碼,一個嵌套類。 X1是一個全局變量,並在構造函數中初始化。 KeyPressed,用於移動Iamge bhoop,不起作用。我已經檢查了所有代碼,以使其正確,但圖像不會移動,無論如何。請幫我解決這個問題。我會很感激你的幫助< 3.KeyPressed無法正常工作

+3

Look [here](http://stackoverflow.com/questions/22741215/how-to-use-key-bindings-instead-的密鑰-聽衆/ 22741216)。 – user1803551

+3

正如許多類似的問題已經回答 - 不要使用KeyListeners,而是使用Key Bindings。否則,你不得不使用讓你的JPanel保持焦點的混亂,不好。另外,不要閱讀paintComponent方法中的所有圖像,因爲這會降低GUI對爬網的響應速度。取而代之的是在構造函數中讀取圖像,並將圖像或ImageIcons存儲在字段中。 –

回答

0

如這裏解釋:addKeyListener() doesn't work for JPanel

您的面板需求成爲焦點:

this.setFocusable(true); 
this.requestFocusInWindow(); 
+3

一個可怕的可怕的kludge。現在你被迫阻止所有其他組件獲得焦點。更好的答案是使用密鑰綁定。 –

2

已註冊KeyListener該組件必須有focusKeyListener到火。請在組件上調用requestFocus以請求組件具有焦點或更好地使用KeyBindings