Rewrote almost every class, no more JPanels. Canvas with BufferStrategy, drawing on BufferStrategy instead of panels that can't be controlled with a game loop, actual render() method instead of calling repaint().