2013-09-25 120 views
2

我目前正在編寫一個小程序,我應該使用基本的轉換。現在,我正在努力通過使用箭頭鍵來移動多邊形。現在我可以通過按下鼠標將其移動到右側,但我寧願能夠使用右側的箭頭鍵。但是,無論我嘗試過哪種方法,我都無法做到。KeyAdapter監聽器,什麼都沒發生

import java.awt.Color; 
import java.awt.Container; 
import java.awt.Graphics; 
import java.awt.Polygon; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 


class PolygonPanel extends JPanel implements MouseListener{ 
    Polygon p; 
    public PolygonPanel(){ 
     p = new Polygon(); 
     p.addPoint(10, 10); 
     p.addPoint(100,50); 
     p.addPoint(50,100); 
     addMouseListener(this); 
     addKeyListener(new MKeyListener()); 
    } 

    class MKeyListener extends KeyAdapter{ 
     public void keyPressed(KeyEvent e){ 
      int keyCode = e.getKeyCode(); 
      if(keyCode==e.VK_RIGHT){ 
       System.out.println("FFFFUUUUU"); 
      } 
     } 
    } 


    public void paintComponent(Graphics g){ 
     super.paintComponent(g); 
     setBackground(Color.white); 
     g.fillPolygon(p); 
    } 

    @Override 
    public void mouseClicked(MouseEvent arg0) { 
     System.out.println("hei"); 
     for (int i = 0; i < p.npoints; i++) { 
      p.xpoints[i] = p.xpoints[i]+10; 
      repaint(); 
     } 

    } 

    @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 

    } 
} 

class PolygonFrame extends JFrame{ 
    public PolygonFrame(){ 
     setTitle("Polygoner"); 
     setSize(700, 600); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     Container contentPane = getContentPane(); 
     contentPane.add(new PolygonPanel()); 
    } 
} 

public class Polygonfun { 
    public static void main(String[] args) { 
     JFrame frame = new PolygonFrame(); 
     frame.setVisible(true); 
    } 

} 

當我按下右箭頭鍵時沒有任何反應。我也試圖實現這樣的:

class PolygonPanel extends JPanel implements MouseListener,KeyAdapter 

,然後添加未實現的方法,但也不能工作。我知道我可能忽略了一些東西,但我似乎無法弄清楚。有什麼建議?

謝謝

+0

我建議你閱讀這篇文章:http://stackoverflow.com/questions/616924/how-to-check-if-the-key-pressed-was-an -arrow-key-in-java-keylistener – Archer

回答

1

設置this.setFocusable(true);爲您的面板。

應該是:

public PolygonPanel(){ 
    p = new Polygon(); 
    p.addPoint(10, 10); 
    p.addPoint(100,50); 
    p.addPoint(50,100); 
    addMouseListener(this); 
    this.setFocusable(true); 
    this.addKeyListener(new MKeyListener()); 
} 
+0

你是我的英雄。非常感激。 – Boxiom