KeyPress上的Java旋转椭圆

时间:2014-12-23 14:11:19

标签: java graphics keylistener graphics2d

我对Java有基本的了解,我需要创建一个Sunset App。 如果按键盘右侧,太阳需要以一定角度旋转。 当我按下右键时它不会重绘或移动椭圆,我已经检查过syso是否听众工作并输出测试所以我有旋转和填充的问题...任何人都可以帮助我吗? 这是我的Jpanel班级......

public class OEF7 extends JPanel implements KeyListener{

private Graphics2D g2d;
private Ellipse2D sun;

public void paintComponent( Graphics g){
    super.paintComponent(g);
     g2d = (Graphics2D) g;
    g2d.setPaint(new GradientPaint(50,50,Color.RED, 100,100,Color.YELLOW,true));
    sun = new Ellipse2D.Double(0,0,50,50);
    g2d.translate(350, 200);

}

@Override
public void keyPressed(KeyEvent e) {
    // TODO Auto-generated method stub
    if (e.getKeyCode() == 39) {
         g2d.rotate(Math.PI/10.0);
         g2d.fill(sun);
         //---- repaint() ?

        }
}

1 个答案:

答案 0 :(得分:1)

图形对象仅在绘画期间有效。如果您保存它并尝试在其他方法中使用它,例如KeyListener方法,则它不再有效。在那一点修改它什么都不做。

您的类需要将旋转存储在字段中,然后在绘制期间使用该字段:

private double rotation;

// ...

@Override
public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
        rotation = (rotation + Math.toRadians(10)) % (Math.PI * 2);
        repaint();
    }
}