Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Заочники 2020-2021 / Лекция 5.ppt
Скачиваний:
81
Добавлен:
15.06.2021
Размер:
660.99 Кб
Скачать

GUI в Java. Рисование двумерных форм. Библиотека Java 2D

Лекция 5

Для рисования двумерных форм применяется класс Graphics2D

Для рисования предопределенных форм применяется класс Graphics

Поэтому перед рисованием требуется приведение типов: Graphics2D g2 = (Graphics2D) g;

После чего можно создать объект двумерной формы и «нарисовать» его

Line2D line = new Line2D.Double(x0, y0, x1, y1); g2.draw(line);

В Java есть ряд предопределенных форм: Rectangle2D, Ellipse2D, Line2D, Poligon2D

GUI в Java. Рисование двумерных форм. Библиотека Java 2D

Лекция 5

Класс-компонент DrawGraf для рисования красного квадрата размером 10х10 пикселей

class DrawGraf extends JComponent

{

private static final Double W = 200; private static final Double H = 100;

public void paintComponent(Graphics g) {

//Создаем объект g2 для двумерного рисования из объекта g Graphics2D g2 = (Graphics2D) g;

//Устанавливаем цвет, который будет применяться //для всего содержимого компонента: линий, текстов, заливки фигур

g2.setColor(Color.RED);

//Рисуем квадрат по центру компонента. Цвет линии - красный Rectangle2D rec = new Rectangle2D.Double(W/2-5, H/2-5, 10, 10);

g2.draw(rec); //Меняем цвет на синий

g2.setColor(Color.BLUE); //Закрашиваем квадрат синим цветом

g2.fill(rec);

}

public Dimension getPreferredSize() { return new Dimension(W, H);

}

}

GUI в Java. Работа со шрифтом и цветом

Лекция 5

Работа со шрифтом

Если требуется изменить размер шрифта, то перед вызовом метода рисования текста нужно определить тип шрифта и размеры текста с помощью объекта типа Font. Размер и тип шрифта устанавливается для всего компонента.

Font FTitle = new Font("Arial", Font.PLAIN, 14); g2.setFont(FTitle);

Если требуется узнать какие шрифты установлены на компьютере, то нужно вызвать метод getAvailableFontFamilyNames() из класса GraphicsEnvironment().

String{} FontNames =

GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();

Управление цветом

Можно менять цвет фигур с помощью установки цвета для объекта Graphics2D

Установленный цвет применяется для всех форм.

Поэтому, Чтобы нарисовать форму другим цветом надо сменить общий цвет.

Для заливки форм цветом применяется метод fill().

GUI в Java. Абсолютное позиционирование

Лекция 5

Создать и разместить во фрейме два компонента с абсолютным позиционированием и разными графическими эффектами: цвет шрифта, цвет фона, цвет границы, изменение цвета по клику мыши

Скролинг

Нажатие на верхний компонент

JFrame

CHalloJav a

CHalloMiet

ScrollPane

Panel

GUI в Java. Абсолютное позиционирование

Лекция 5

class CHalloJava extends Canvas implements MouseListener

{

//скыты определения DEF и MES

private Color c;

private boolean isDown=false; private Color current_c;

CHalloJava(Color c) { super();

setBackground(Color.yellow); //Цвет подложки - желтый this.c = c;

addMouseListener(this); //Добавляем "слушателя" событий мыши на объекте

}

CHalloJava(Color c, int w, int h) { super();

setBackground(Color.yellow); //Цвет подложки - желтый this.c = c;

this.DEF_WIDTH = w; this.DEF_HEIGHT = h; this.MES_X = 20; this.MES_Y = h-20;

addMouseListener(this); //Добавляем "слушателя" событий мыши на объекте

}

/*

//В Canvas paintComponent не работает public void paintComponent(Graphics g) {

g.setColor(this.c);

g.drawString("Hallo Java (paintComponent)", MES_X, MES_Y); g.fillOval(5, this.MES_Y-10, 10, 10);

}

*/

public void paint(Graphics g) {

if (isDown) { setBackground(Color.yellow); g.setColor(Color.black);

} else {

if( current_c != null ) { setBackground(current_c); } g.setColor(this.c);

}

g.drawString("Hallo Java (paint) ", MES_X, MES_Y); g.fillOval(5, this.MES_Y-10, 10, 10);

}

public Dimension getPreferredSize() {

return new Dimension(DEF_WIDTH, DEF_HEIGHT);

//Метод возвращает предпочтительные размеры компонента

}

//Добавлены методы обработки событий мыши

@Override

public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub

}

@Override

public void mousePressed(MouseEvent e) { // TODO Auto-generated method stub

isDown=true; current_c = getBackground(); repaint();

}

@Override

public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub isDown=false; repaint();

}

@Override

public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub

}

@Override

public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub

}

GUI в Java. Абсолютное позиционирование

Лекция 5

class CHalloMiet extends JComponent

 

{

 

public int MES_X = 30;

 

public int MES_Y = 20;

 

//Определяем координаты левой верхней точки прямоугольника

 

//содержащего компонент относительно левой верхней точки фрейма

 

private int DEF_WIDTH = 300;

 

private int DEF_HEIGHT = 300;

 

//Определяем предпочтительные размеры прямоугольника,

 

//содержащего компонент

 

private Color c;

 

private Color fc = Color.yellow;

 

CHalloMiet(Color c) {

 

setBackground(Color.yellow); //Не работает для Jcomponent

 

this.c = c;

 

}

 

CHalloMiet(Color c, int w, int h) {

 

setBackground(Color.yellow); //Не работает для Jcomponent

 

this.c = c;

 

this.DEF_WIDTH = w;

 

this.DEF_HEIGHT = h;

 

this.MES_X = 20;

 

this.MES_Y = h-20;

 

}

 

//работает и paint и paintComponent, но paint имеет приоритет

 

public void paintComponent(Graphics g) {

 

g.setColor(this.fc);

 

g.fillRect(0, 0, this.DEF_WIDTH, this.DEF_HEIGHT);

 

g.setColor(this.c);

 

g.drawString("Hallo Miet (paintComponent)", MES_X, MES_Y);

 

g.fillOval(5, this.MES_Y-10, 10, 10);

 

}

 

/*

 

public void paint(Graphics g) {

 

//Если есть paint, то paintComponent не срабатывает

 

g.setColor(this.c);

 

g.drawString("Hallo Miet (paint)", MES_X, MES_Y);

 

g.fillOval(5, this.MES_Y-10, 10, 10);

 

}

 

*/

 

public Dimension getPreferredSize() {

 

return new Dimension(DEF_WIDTH, DEF_HEIGHT);

 

//Метод возвращает предпочтительные размеры компонента

 

}

 

}

 

GUI в Java. Абсолютное позиционирование

Лекция 5

public class SimpleFrame extends JFrame {

private int D_W = 400; private int D_H = 400;

public SimpleFrame() {

setLayout(null); //Подавляем применение макета по умолчанию setSize(this.D_W, this.D_H); //getContentPane().setBackground(Color.RED) ;

public class Start {

public static void main(String[] args) { // TODO Auto-generated method stub EventQueue.invokeLater(new Runnable() { public void run() {

//Контейнер с автоскролигом (скроллконтейнер) ScrollPane sp = new ScrollPane(); //sp.setSize(this.D_W-100, this.D_H-250); sp.setBounds(10, 10, this.D_W-100, this.D_H-250);

//Панель, в которой будут размещаться компоненты Panel p = new Panel();

p.setLayout(null); //Подавляем применение макета по умолчанию p.setSize(this.D_W-100, this.D_H-100); p.setBackground(Color.red);

//Canvas

CHalloJava chj = new CHalloJava(Color.blue, 200, 100);

SimpleFrame frame = new SimpleFrame(); frame.setTitle("Start"); frame.getContentPane().setBackground(Color.darkG ray); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CL OSE);

frame.setVisible(true);

}

});

}

chj.setBackground(Color.red); //Устанавливаем цвет подложки

}

chj.setBounds(0, 0, 200, 100); //Устанавливаем позицию и размеры

 

//Объекту типа Canvas нельзя установить границу, в нем нет такого метода

 

//chj.setBorder(BorderFactory.createLineBorder(Color.red));

 

p.add(chj);

 

//JComponent

 

CHalloMiet chj2 = new CHalloMiet(Color.green, 200, 100);

 

chj2.setBounds(0, 101, 200, 100);

 

chj2.setBorder(BorderFactory.createMatteBorder(5, 10, 5, 10, Color.green));

 

//Метод setBackground не работает для JComponent т.к. это "легкий" компонент

 

//и он создается прозрачным

 

chj2.setBackground(Color.blue);

 

p.add(chj2);

 

//pack(); //Не включаем авторазмещение (упаковку) элементов в панели

 

//Добавляем панель в скроллконтейнер

 

sp.add(p);

 

p.setBackground(Color.black); //Можно изменять свойства объектов после

 

добавления

 

//добавляем скроллконтейнер во фрейм

 

add(sp);

 

}

 

}

 

Соседние файлы в папке Заочники 2020-2021