Читаем Java 7 полностью

Каждый стандартный графический компонент — это прямоугольная область на экране со сторонами, параллельными сторонам экрана. Стороны прямоугольника выделяются каким-то образом на экране. Например, стороны кнопки JButton нарисованы так, что создают впечатление ее выпуклости. При нажатии кнопки мыши оформление сторон графической кнопки меняется, создавая впечатление ее "вдавленности".

Некоторые компоненты, например JLabei, вообще не оформляют свои границы.

В любом случае библиотека Swing позволяет изменить оформление границ всякого компонента, в том числе и контейнера, обведя его рамкой, причем рамка может быть самого разного вида.

Самые общие свойства всех рамок описаны интерфейсом Border из пакета javax. swing. border. Основное свойство — вычерчивание рамки методом

public void paintBorder(Component c, Graphics g,

int x, int y, int width, int height);

Здесь задается компонент c, который обводится рамкой, экземпляр g класса Graphics, обладающего методами рисования, и размеры рамки, которые обычно совпадают с размерами компонента, чуть больше или чуть меньше их.

Рамка может быть прозрачной или не прозрачной. Это отмечается логическим методом

isBorderOpaque().

Последний метод интерфейса, getBorderInsets(Component c), возвращает пространство, занятое рамкой данного компонента c, в виде экземпляра класса Insets. Напомним, что в классе Insets это пространство определяется толщиной рамки сверху top, слева left, справа right и снизу bottom. Все четыре поля класса Insets — просто целочисленные переменные, и получить толщину рамки сверху можно так:

int d = b.getBorderInsets(this).top;

Интерфейс Border частично реализован абстрактным классом AbstractBorder, в котором сделана пустая реализация метода paintBorder(), метод isBorderOpaque() возвращает false, а метод getBorderInsets () — объект с нулевыми значениями. Кроме этих реализаций в классе есть метод

public static Rectangle getInteriorRectangle(Component c, Border b,

int x, int y, int width, int height);

который удобно использовать для определения размеров самого компонента без рамки.

Класс AbstractBorder расширяют около двадцати классов, вычерчивающих самые разнообразные рамки. Для удобства работы с ними в пакете javax.swing имеется класс BorderFactory, в котором собраны статические методы вида createXxxBorder ( ) для различных типов рамок с разными параметрами. Чаще всего для создания рамки достаточно воспользоваться одним из этих методов, а затем установить полученную рамку в компонент методом setBorder(Border) класса JComponent. Например, на рис. 16.1 один из компонентов создан методами:

JLabel l2 = new JLabel(" LineBorder(Color.blue, 3) ");

l2.setBorder(BorderFactory.createLineBorder(Color.blue, 3));

Рассмотрим подробнее некоторые типы рамок. Простые типы рамок показаны на рис. 16.1, созданном программой листинга 16.1.

Листинг 16.1. Простые рамки

import java.awt.*; import javax.swing.*; import javax.swing.border.*;

public class SimpBorders extends JFrame{

SimpBorders(){

super(" Простые рамки"); setLayout(new FlowLayout());

JButton l1 = new JButton(" EmptyBorder() "); l1.setBackground(Color.white);

11. setBorder(BorderFactory.createEmptyBorder());

JLabel l2 = new JLabel(" LineBorder(Color.blue, 3) ");

12. setBorder(BorderFactory.createLineBorder(Color.blue, 3));

JLabel l3 = new JLabel(" BevelBorder(BevelBorder.RAISED) ");

13. setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));

JLabel l4 = new JLabel(" BevelBorder(BevelBorder.LOWERED) ");

14. setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));

JLabel l5 = new JLabel(" Объемная двухцветная рамка ");

15. setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED,

Color.black, Color.white, Color.black, Color.white));

JLabel l6 = new JLabel(" EtchedBorder() ");

l6.setBorder(BorderFactory.createEtchedBorder());

add(l1); add(l2); add(l3); add(l4); add(l5); add(l6);

setSize(400, 400);

setDefaultCloseOperation(EXIT ON CLOSE); setVisible(true);

public static void main(String[] args){ new SimpBorders();

}

}

Рис. 16.1. Простые рамки

Пустая рамка EmptyBorder

Класс EmptyBorder представляет самую простую рамку. Это пустое пространство, окружающее компонент, как показано на рис. 16.1, сверху слева. Конструкторы класса

EmptyBorder(Insets);

EmptyBorder(int top, int left, int bottom, int right);

задают толщину рамки.

Статический метод createEmptyBorder( ) класса BorderFactory создает пустую рамку с нулевыми размерами, а статический метод

createEmptyBorder(int top, int left, int bottom, int right);

рамку с заданными размерами.

Рамка невидима- метод isBorderOpaque() возвращает false, метод paintBorder() не вы

черчивает ничего. Метод getBorderInsets () без аргументов возвращает размеры рамки в виде экземпляра класса Insets.

Употребление пустой невидимой рамки сводится к определению экземпляра класса

EmptyBorder и установке его в компонент методом setBorder (Border) класса JComponent.

Прямолинейная рамка LineBorder

Перейти на страницу:

Все книги серии В подлиннике

Java 7
Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др. Дано подробное изложение последней версии сервлетов, технологии JSP и библиотек тегов JSTL. Около двухсот законченных программ иллюстрируют рассмотренные приемы программирования. Приведена подробная справочная информация о классах и методах Core Java API.

Ильдар Шаукатович Хабибуллин

Программирование, программы, базы данных

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных