Учебная страница курса биоинформатики,
год поступления 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 реализует этот интерфейс. Еще один полезный класс, реализующий интерфейс Paint – GradientPaint. Он обеспечивает градиентное заполнение. Пользователь задает две точки: 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 – размер шрифта.