Я создал целый класс методов для рисования точек, линий, прямоугольников, окружностей и т. Д. Я разработал его для обработки окна как листа миллиметровки, где начало координат не обязательно должно быть вверху слева, а значения y увеличиваются с ростом. Вот как я рисую линии:
public static void drawLine (double x1, double y1, double x2, double y2)
{
((Graphics2D)g).draw(new Line2D.Double(x0+x1*scale, y0-y1*scale, x0+x2*scale, y0-y2*scale));
}
В приведенном выше примере (x0, y0)
представляет начало координат в экранных координатах, а scale
- коэффициент масштабирования. Входные параметры должны быть представлены в виде координат графика, а не экранных координат. repaint()
не вызывается. Вы можете сохранить, пока не начертите все нужные вам линии.
Мне приходит в голову, что кто-то, возможно, не хочет думать в терминах миллиметровки:
((Graphics2D)g).draw(new Line2D.Double(x1, y1, x2, y2));
Обратите внимание на использование Graphics2D
. Это позволяет нам рисовать Line2D
объект, используя двойные числа вместо целых. Помимо других форм, в моем классе есть поддержка трехмерного перспективного рисования и несколько удобных методов (например, рисование круга, центрированного в определенной точке с заданным радиусом.) Если кому-то интересно, я был бы рад поделиться с вами большим количеством этого класса.