KeyAdapter监听器,什么都没发生

时间:2013-09-25 12:57:01

标签: java jpanel keylistener

我目前正在编写一个小程序,我应该使用基本的转换。现在,我正在努力通过使用箭头键移动多边形。现在我可以通过按下鼠标向右移动它,但我宁愿能够使用右箭头键。但是,无论我尝试哪种方法,我都无法做到。

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

然后添加未实现的方法,但这也不起作用。我知道我可能忽略了一些东西,但我似乎无法弄明白。有什么建议吗?

由于

1 个答案:

答案 0 :(得分: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());
}