Mi spiace, ma di "sensato" c'è poco, anzi quasi nulla.
1) hai fatto partire la creazione della GUI nel "main" thread invece che nel Event Dispatch Thread. Questa in generale non è una cosa gravissima e generalmente non causa problemi ... a patto che l'ULTIMA cosa fatta sia il setVisible(true). Invece fai altro dopo. Quindi sarebbe meglio che apprendi meglio i concetti sul EDT.
2) il while(true){ repaint(); } non ha assolutamente senso. Vuol dire che non hai (ancora) compreso come funziona il painting in Swing.
3) il x++ è fatto a seguito di un evento causato dalla tastiera. La velocità con cui avviene non dipende dal programma Java ma DIPENDE da come è configurato il sistema riguardo la velocità di ripetizione dei tasti! (Sui Windows: pannello di controllo -> Tastiera)
4) il Thread.sleep(1) nel keyPressed non ha senso ed è del tutto inutile. Se anche la velocità di ripetizione dei tasti fosse es. di 30 ripetizioni/secondo (= circa 33 millisecondi di intervallo), il fatto di "tardare" la terminazione del keyPressed di 1 millisecondo non cambia NULLA. E anzi, a seconda del sistema, non è affatto detto che la "granularità" dello sleep sia davvero del millisecondo!
aggiungiamo un
5) la prima istruzione del paintComponent da fare generalmente è un super.paintComponent(g); a meno che "sai" esattamente cosa stai facendo e perché.