Прямоугольник использует координаты int.
Rectangle2D - абстрактный класс, который не заботится о том, используете ли вы int, double или float.
Если вам нужна большая точность double и float, вам придется использовать Rectangle2D.
Rectangle2D является базовым классом, поэтому, если вы пишете код, который работает с прямоугольными формами абстрактным образом, перейдите к Rectangle2D и присвойте его следующим образом:
Rectangle2D rect = new Rectangle2D.Double(double, double, double, double);
или
Rectangle2D rect = new Rectangle(int, int, int, int)
Если вы знаете, что имеете дело только с целыми числами, вы можете использовать Rectangle полностью.
Вы можете сказать, что Rectangle должен называться Rectangle2D.Integer. Но это не совсем так, потому что, например, Прямоугольник - единственный из трех, который реализует сериализуемый интерфейс.
Как прокомментировал Скаффман, это немного устаревшая проблема.