Учебная страница курса биоинформатики,
год поступления 2010

Графическая система Java

Каждый компонент (класс JComponent) сам отвечает за свою отрисовку. Это происходит через вызов его метода Component.paintComponent(Graphics gr). При этом передаваемый в методе объект типа Graphics отвечает за доставку действий рисования в видеопамять. При рисовании каждого компонента начало координат (0, 0) расположено в верхнем левом углу этого компонента. Класс Graphics2D расширяет класс Graphics, обеспечивая улучшенную графику и свойства рисования. Если хочется создать свой компонент, рисующий свою поверхность особым образом, то необходимо создать класс, расширяющий JComponent, и перегрузить у него метод paintComponent(Graphics). Методы класса Graphics для отрисовки Рассмотрим обзорно методы класса Graphics, предназначенные для отрисовки.

Переключить отображение номеров строк
   1 drawLine(x1, y1, x2, y2)

Этот метод отображает линию толщиной в 1 пиксел, проходящую из точки (x1, y1) в (x2, y2). Именно он использовался в предыдущем примере.

Переключить отображение номеров строк
   1 drawRect(int x, int y, int width, int height)

Этот метод отображает прямоугольник, чей левый верхний угол находится в точке (x, y), а ширина и высота равняются width и height соответственно. Правая сторона пройдет по линии x+width, а нижняя – y+height. Предположим, мы хотим сделать компонент, на котором нарисован конвертик во весь размер компонента:

Переключить отображение номеров строк
   1 public class MyComp extends JPanel {
   2   public MyComp() {
   3     super();
   4   }
   5   public void paintComponent(Graphics g) {
   6     super. paintComponent(g);
   7     g.setColor(Color.black);
   8     g.drawLine(0,0,getWidth()-1, getHeight()-1);
   9     g.drawLine(0,getHeight()-1, getWidth()-1,0);
  10     g.drawRect(0,0,getWidth()-1, getHeight()-1);
  11   } 
  12 }

Переключить отображение номеров строк
   1 fillRect(int x, int y, int width, int height)

Этот метод закрашивает прямоугольник. Левая и правая стороны прямоугольника проходят по линиям x и x+width-1 соответственно, а верхняя и нижняя – y и y+height-1 соответственно. Таким образом, чтобы зарисовать все пикселы компонента, необходимо передать следующие аргументы:

Переключить отображение номеров строк
   1 g.fillRect(0, 0, getWidth(), getHeight());

Переключить отображение номеров строк
   1 drawOval(int x, int y, int width, int height)

Этот метод рисует овал, вписанный в прямоугольник, задаваемый указанными параметрами. Очевидно, что если прямоугольник имеет равные стороны (т.е. является квадратом), овал становится окружностью.

Переключить отображение номеров строк
   1 fillOval(int x, int y, int width, int height)

Этот метод закрашивает указанный овал.

Другие полезные методы:

Переключить отображение номеров строк
   1 void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)//рисует дугу
   2 void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)//сектор
   3 void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)//многоугольник
   4 void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)//закрашенный многоугольник
   5 

Класс `Color` (прозрачность), реализация интерфейса `Paint` (градиент), Шрифты, текст.

Цвета

Для задания цвета в AWT используется специальный класс Color. Цвет задается 3 целочисленными характеристиками, соответствующими модели RGB, – красный, синий, зеленый. Каждая из них может иметь значение от 0 до 255 (тем не менее, их тип определен как int). Помимо конструктора

Переключить отображение номеров строк
   1 public Color(int r,   int g,  int b)

есть еще конструктор

Переключить отображение номеров строк
   1 public Color(int r, int g, int b, int a)

, где а отвечает за прозрачность цвета (также измеряется от 0 до 255).

Интерфейс Paint

Этот интерфейс определяет цветовое заполнение для операций рисования у Graphcs2D. Класс Graphics2D содержит метод setPaint(Paint p), который устанавливает цветовое заполнение графических объектов, отображаемых методами draw*(*) и fill*(*). В частности, класс Color реализует этот интерфейс. Еще один полезный класс, реализующий интерфейс PaintGradientPaint. Он обеспечивает градиентное заполнение. Пользователь задает две точки: P1 c цветом C1 и P2 с цветом C2. Цвет точек вдоль линии P1P2 пропорционально изменяется от C1 к C2. Основной конструктор:

Переключить отображение номеров строк
   1 public GradientPaint(float x1, float y1, Color color1, float x2, float y2, Color color2)

Шрифты, текст

Для того, чтобы отобразить на рисунке строку текста, используется метод класса Graphics

Переключить отображение номеров строк
   1 public abstract void drawString(String str, int x, int y)

Можно установить необходимый шрифт с помощью метода

Переключить отображение номеров строк
   1 public abstract void setFont(Font font)

Класс Font задает шрифт

Переключить отображение номеров строк
   1 public Font(String name, int style, int size)

где name – имя шрифта, style – стиль (обычный, жирный, курсив), size – размер шрифта.