Graphics2D: я должен использовать версии int или float? - PullRequest
4 голосов
/ 28 апреля 2011

Некоторые из методов Graphics2D, такие как drawString, имеют версии, которые принимают координаты как int или float. Есть ли какие-либо причины для выбора одного над другим?

Аналогично, я должен использовать более новые классы Shape, такие как Rectangle2D (которые используют координаты с плавающей точкой), или использовать Rectangle (который определяет координаты как int s)?

1 Ответ

4 голосов
/ 28 апреля 2011

Я вижу int и float -

drawString(AttributedCharacterIterator iterator, float x, float y) 
Renders the text of the specified iterator, using the Graphics2D context's current Paint.

drawString(AttributedCharacterIterator iterator, int x, int y) 
Renders the text of the specified iterator, using the Graphics2D context's current Paint.

Используйте float, если вам нужно больше точности, int, если позиций достаточно.

Относительно вашего второго вопроса, см. Ниже, который был описан / ответил следующим образом: Прямоугольник и Различие Rectangle2D :

Прямоугольник использует координаты 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. Но это не совсем так, потому что, например, Прямоугольник - единственный из трех, который реализует сериализуемый интерфейс.

Как прокомментировал skaffman, это немного устаревшая проблема.

...