Kodomo

Пользователь

Учебная страница курса биоинформатики,
год поступления 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 – размер шрифта.