Я хочу рисовать объекты (включая размещение компонентов) в контейнере, нарисованном идеально в середине.
Проблема в том, чтобы использовать средние x и y и вычесть / добавить половину ширины окна иВысота не достаточно.
Когда я рисую прямоугольник, используя этот код:
g.drawRect( 10, 10, this.getWidth() - 20, this.getHeight() - 20);
Тогда это не сработает.С помощью линии выше я хочу нарисовать прямоугольник с отступом 10 пикселей со всех сторон.Поэтому я начинаю с 10x10, затем беру полную ширину и полную высоту окна и вычитаю 20 из него, потому что 10 с левой стороны и 10 с правой стороны.
В этом случае я должен получитьпрямоугольник с идеально отцентрированным расстоянием в 10 пикселей до границы окна.
Но правая и нижняя части прямоугольника находятся вне окна, поэтому ширина и высота, заданные методу drawRect, слишком велики.
Я думаю, что это происходит от границы окон.Точка 0x0 - это не точка, в которой вы ВИДИТЕ чертежи.Я предполагаю, что 0x0 начинается в самой верхней левой точке самого окна (без области рисования).
Так что в этом случае мне нужно знать область рисования.Что-то вроде прямоугольника, дающего мне координаты, где мне нужно начать рисование, чтобы я мог сопоставить свои координаты с координатами окон.
Поэтому, когда я хочу нарисовать точку в 0x0 (видимой области рисования), тогдаэта точка должна быть сопоставлена с чем-то вроде 8x30.
Я сделал тест, добавив слушателя мыши, печатающего положение мыши, когда мышь перемещается.Когда я перемещаю мышь в крайнее левое положение области рисования, мое приложение печатает координаты 8x30.это означает, что левая граница имеет ширину 8 пикселей, а верхняя панель (показывающая заголовок окна и кнопки закрытия / минимизации) имеет высоту 30 пикселей.
Как мне теперь это сделать.Я хотел бы сказать что-то вроде
g.drawRect( 10, 10, this.getWidth() - 20, this.getHeight() - 20);
, чтобы я рисовал прямоугольник идеально по центру даже при изменении размера окна.
Я думаю, что легче понять мою проблему, когда вы пытаетесь рисоватьthis:
Font font = g.getFont();
FontRenderContext frc = g.getFontMetrics().getFontRenderContext();
Rectangle2D rect = font.getStringBounds( "Hello", frc);
g.drawString( "Hello", (int) ( this.getWidth() - rect.getWidth()), (int) ( this.getHeight() - rect.getHeight()));
Это берет размер текста "Hello", затем пытается напечатать его в правом нижнем углу.Код верный, но текст «Hello» появляется в правом нижнем углу, мне нужно изменить размер окна (сделать его больше), чтобы увидеть текст.