我对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() ?
}
}
答案 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();
}
}