2014-02-28 14 views
0

我不知道這裏有什麼問題,我剛開始編碼,我搜索了整個互聯網,找不到答案,請不要讓答案聽起來很複雜。感謝 我試圖做一個像馬里奧遊戲,它似乎是在路上,但很快我會更好用superg重新繪製會導致消隱.. netbeans

int x, y; 



public class AL extends KeyAdapter { 
    public void keyPressed(KeyEvent e) { 
     int KeyCode = e.getKeyCode(); 

     if(KeyCode == e.VK_LEFT) { 
      x--; 
     } 
     if(KeyCode == e.VK_RIGHT) { 
      x++; 
     } 
     if(KeyCode == e.VK_UP) { 
      y--; 
     } 
     if(KeyCode == e.VK_DOWN) { 
      y++; 
     } 
    } 
    public void KeyReleased(KeyEvent e) { 

    } 
} 



public Wesley() { 
    addKeyListener(new AL()); 

    setTitle("Wesley and the interuption"); 
    setSize(500, 500); 
    setResizable(false); 
    setVisible(true); 
    setLocationRelativeTo(null); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    x = 150; 
    y = 150; 
} 

@Override 
public void paint(Graphics g) { 
    g.fillOval(x, y, 15, 15); 

    repaint(); 

} 

public static void main(String[] args) { 
    new Wesley(); 
} 
+0

我假設Weasly從JFrame延伸。你應該避免重寫一般的繪畫,但尤其是基於窗口的類,因爲它們不是雙緩衝的,這就是創建閃爍的原因。而是使用類似JPanel的東西並重寫它的paintComponent – MadProgrammer

回答

3
  • 不要repaint()paint方法。您可能想要在您的keyXxx方法之一中執行此操作。

  • 你打破油漆鏈不是在你的paint方法調用super.paint(g);。所以確保你稱它爲它。

    @Override 
    public void paint(Graphics g) { 
        super.paint(g); 
    } 
    
  • 還可以使用@Override註解,讓你知道你是正確的覆蓋方法。此KeyReleased不是密鑰發佈功能的有效覆蓋。你的外套是錯的。所以一個重要的版本將無能爲力。


旁註

  • 考慮使用Key Bindings與Swing應用程序特定的關鍵功能。您可能有焦點問題KeyListener

  • 請參閱Performinf Custom Painting。優選在JComponentJPanel@OverridepaintComponent上塗漆並呼叫super.paintComponent而不是paint

  • Event Dispatch Thread運行Swing應用程序。見Intial Threads

  • setVisible之後setLocationXxx。我敢打賭你想知道爲什麼你的用戶界面在左上角閃爍,他們移動到了中心。 這是是原因。

相關問題