- •Основы Java
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Вложенные и внутренние классы
- •ООП в Java. Обобщения
- •ООП в Java. Обобщения
- •ООП в Java. Обобщения. Ограниченные типы
- •ООП в Java. Обобщения. Ограниченные типы
- •ООП в Java. Обобщения. Шаблон аргумента.
- •ООП в Java. Обобщения. Шаблон аргумента.
- •ООП в Java. Обобщения. Ограниченный шаблон аргумента.
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные методы
- •ООП в Java. Обобщения. Обобщенные конструкторы
- •ООП в Java. Обобщения. Обобщенные конструкторы
- •ООП в Java. Некоторые примеры использования обобщений
- •ООП в Java. Обобщения. Обобщенные интерфейсы
- •ООП в Java. Обобщения. Обобщенные интерфейсы
- •ООП в Java. Автоматическое определение аргументов типа
- •ООП в Java. Обобщения. Очистка
- •ООП в Java. Ограничения в использовании обобщений
- •ООП в Java. Ограничения в использовании обобщений
- •GUI в Java
- •GUI в Java. AWT
- •GUI в Java. SWING
- •GUI в Java. JavaFX
- •GUI в Java. Создание простого GUI в SWING
- •GUI в Java. Создание простого GUI в SWING
- •GUI в Java. Менеджеры компоновки в SWING
- •GUI в Java. Панели фрейма
- •GUI в Java. Создание фрейма (окна) приложения
- •GUI в Java. Создание фрейма (окна) приложения Лекция 5
- •GUI в Java. Создание компонента для публикации «Hallo Java»
- •GUI в Java. Размещение компонента во фрейме
- •GUI в Java. Размещение нескольких компонетов
- •GUI в Java. Рисование двумерных форм. Библиотека Java 2D
- •GUI в Java. Рисование двумерных форм. Библиотека Java 2D
- •GUI в Java. Работа со шрифтом и цветом
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
- •GUI в Java. Абсолютное позиционирование
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); |
|
} |
|
} |
|