
- •9. Библиотека .Net Framework и библиотеки языка Java
- •9.1. Приложение
- •9.2. Классы, объекты и элементы приложения
- •9.3. Простейшие приложения
- •9.4. Сообщения Windows, события и делегаты
- •9.4.1. Обработка событий мыши на языке c#
- •9.4.3. Обработка событий мыши на языке Java с использованием предопределённого обработчика mouseDown
- •9.4.4. Связь события с несколькими объектами на языке c#
- •Ещё раз о событиях и уведомлении в языке Java
- •9.5.1. Обработка событий элементов интерфейса пользователя в языке Java
- •Обработка событий мыши на языке Java, используя интерфейс MouseListener
- •9.5.3. Обработка событий мыши на языке Java, используя классы адаптеров
- •9.5.4. Обработка событий мыши на языке Java, используя внутренние классы адаптеров и анонимные классы
- •9.5.5. Обработка события закрытия окна
- •Графика
- •9.6.1. Графические объекты
- •Прямоугольник
- •Класс Pen
- •Класс SolidBrush
- •Класс Font
- •Класс Graphics
- •9.7. Событие Paint и его обработчик
- •9.8. Управляющие элементы
- •Класс Button
- •Классы TextBox и TextField
- •Классы UserControl и Panel
- •9.9. Дочерние окна
- •9.10. Исключения
Класс Graphics
C++/CLI и C#. Объект класса Graphics является контекстом рисования, связанным с конкретным контекстом устройства и чаще всего с окном (формой). Класс Graphics предоставляет множество функций для рисования в этом окне строк (strings), прямоугольников (rectangles), эллипсов (ellipses) и т.д. Например:
C++/CLI.
void DrawString (String ^pS, Font ^pF, Brush ^pB, float x, float y);
void DrawRectangle (Pen ^pP, Rectangle r);
void FillEllipse (Brush ^pB, Rectangle r);
C#.
void DrawString (string s, Font f, Brush b, float x, float y);
void DrawRectangle (Pen p, Rectangle r);
void FillEllipse (Brush b, Rectangle r);
Можно создать графический объект класса Graphics непосредственно, используя функцию CreateGraphics().
Graphics graphics= CreateGraphics ( );
Но чаще всего используют параметр функции перерисовки OnPaint(). Это параметр типа структуры PaintEventArgs, которая одним из своих элементов содержит свойство Graphics.
C#.
Graphics gr= this.CreateGraphics ( ); // Непосредственное использование gr.DrawString (“Drawing”, Font, new SolidBrush (Color.Blue), 10, 10);
C++/CLI.
protected:
virtual void OnPaint (PaintEventArgs ^arg) override // Использование через
// аргумент arg
{
Color col (Color::FromArgb (250, 0, 250, 250));
Drawing::Font ^pFont= gcnew Drawing::Font ("Verdana", 20,
FontStyle::Italic);
arg ->Graphics ->DrawString ("Drawing", pFont, gcnew SolidBrush (col),
10, 30);
}
Java. Язык Java использует пакет AWT, который содержит множество графических классов и функций. Среди классов есть и класс Graphics, содержащий, например, такие функции рисования как
void drawLine (int x1, int y1, int x2, int y2); // Рисовать линию
void drawOval (int x, inty, int w, int h); // Рисовать овал (эллипс)
void drawRect (int x, int y, int w, int h); // Рисовать прямоугольник
void drawString (String str, int x, int y); // Рисовать строку
void fillOval (int x, inty, int w, int h); // Залить овал (эллипс) цветом
void fillRect (int x, int y, int w, int h); // Залить прямоугольник цветом
void setColor (Color color); // Установить цвет
void setFont (Font font); // Установить шрифт
На языке Java также можно создать графический объект с помощью функции getGraphics() и затем воспользоваться функциями рисования, но рисование обычно осуществляется в теле предопределённой функции paint(), аргумент которой является ссылкой на объект графического класса Graphics.
Java.
public void paint (Graphics g) // Использование через аргумент arg
{
g.setColor(Color.magenta);
Font font= new Font ("Verdana", Font.ITALIC, 30);
g.setFont(font);
g.drawString ("Drawing", 10, 70);
}
Пример 9.6.1 иллюстрирует применение графики на языках C#, C++/CLI и Java(J#). В программах на языках C# и C++/CLI использовано пространство имён System.Drawing (System::Drawing), включающее графические классы. Прикладное окно программы представлено на рис. 9.6.1. Программа на языке Java(J#) применяет пакет java.awt.
Пример 9.6.1. Использование графического объекта.
///////////////
// C#
using System;
using System.Drawing;
using System.Windows.Forms;
class MainClass : Form
{
public MainClass ( )
{
Text= "Drawing"; // Заголовок прикладного окна
Show ( ); // Показать окно
Graphics gr= this.CreateGraphics ( ); // Создать графический объект
gr.DrawString ("Drawing", Font, // Нарисовать строку
new SolidBrush (Color.Blue), 10, 50);
gr.DrawString ("Drawing", new Font ("Arial", 25), // Нарис-ть строку new SolidBrush (Color.FromArgb (100, 255, 0, 0)), 5, 40);
String drawStr = "Drawing"; // Создать строку
Font drawFnt = new Font ("Arial", 30);// Создать шрифт
SolidBrush drawBr = new SolidBrush (Color.Green);// и кисть
float x= 10.0F; // Координаты начала строки
float y= 40.0F;
gr.DrawString (drawStr, drawFnt, drawBr, x, y); // Нарис-ть строку
gr.DrawEllipse (new Pen(new SolidBrush (Color.DarkViolet), 2),
15, 15, 60, 70); // Нарисовать эллипс
}
static void Main ( )
{
Application.Run (new MainClass ( )); // Запустить программу
}
}
////////////////
// C++/CLI
#include "stdafx.h"
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
ref class MainClass : Form
{
public: MainClass ( )
{
Text= "Drawing"; // Заголовок прикладного окна
Show ( ); // Показать окно
Graphics ^gr= this->CreateGraphics ( ); // Создать графический
// объект
// Нарисовать строки
gr->DrawString ("Drawing", Font,
gcnew SolidBrush (Color::Blue), 10, 50);
gr->DrawString ("Drawing", gcnew Drawing::Font ("Arial", 25), gcnew SolidBrush (Color::FromArgb (100, 255, 0, 0)), 5, 40);
String ^drawStr = "Drawing";
Drawing::Font ^drawFnt = gcnew Drawing::Font ("Arial", 30);
SolidBrush ^drawBr = gcnew SolidBrush (Color::Green);
float x= 10.0F;
float y= 40.0F;
gr->DrawString (drawStr, drawFnt, drawBr, x, y);
// Нарисовать эллипс
gr->DrawEllipse (gcnew Pen (gcnew SolidBrush (Color::DarkViolet),
2), 15, 5, 60, 70);
}
};
void main ( )
{
Application::Run (gcnew MainClass ( ));
}
///////////////
// Java и J#
import java.awt.*;
class MainClass extends Frame
{
public MainClass ( )
{
this.setTitle ("Drawing"); // Заголовок прикладного окна
setSize (300, 200);
show ( ); // Показать окно
Graphics gr= this.getGraphics ( ); // Создать графический объект
// Нарисовать строку
gr.setColor (Color.blue);
gr.drawString ("Drawing",10, 80);
// Нарисовать ещё строку
gr.setFont(new Font ("Arial", Font.BOLD,25));
gr.drawString ("Drawing", 5, 70);
// Нарисовать еще строку
String drawStr = "Drawing"; // Создать строку
gr.setFont(new Font ("Arial", Font.BOLD, 30));
gr.setColor (Color.green);
int x= 10; // Координаты начала строки
int y= 40;
gr.drawString (drawStr, x, y); // Нарис-ть строку
gr.setColor (Color.darkGray);
gr.drawOval (15, 45, 60, 100); // Нарисовать эллипс
}
public static void main ( )
{
MainClass m= new MainClass ( );
}
}
Рис.9.6.1. Прикладное окно с графической информацией