Добавил:
Rumpelstilzchen2018@yandex.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3-й семестр / Лекции / 4 - Полиморфизм

.pdf
Скачиваний:
84
Добавлен:
25.12.2020
Размер:
619 Кб
Скачать
☆

Java cтрока представляет из себя строку литералов (текст), помещенных в двойные кавычки, например: "Hello , World! ”

Вы можете присвоить последовательность строковых литералов непосредственно переменной типа String, вместо того чтобы вызывать конструктор для создания экземпляра класса String

Оператор '+' является перегруженным, для объектов типа String, и всегда используется, чтобы объединить две строки операндов. В данном контексте мы говорим об операции конкатенации или сложения строк (хотя '+' не работает как оператор сложения для любых других объектов, кроме строк, например, таких как Point и Circle).

Особенности использования строк в Java

Есть два способа создания строк:

•неявное создание путем присвоения строкового литерала переменной

•явное создание объекта String, через вызов оператора new и вызов конструктора.

String s1строка=литералов"Hello";

 

//

String s3 =

String s2строка=литералов"Hello";

//

//

s1; одинаковыессылки

// String

 

String

s4

=объектnew String("Hello");

 

String

s5

=объектnew String("Hello");

// String

 

Строковые литералы хранятся в общем пуле. Это облегчает совместное использование памяти для строк с тем же содержанием в целях сохранения

памяти. Объекты строк, выделенные с помощью оператора new хранятся в куче (heap), а там нет разделяемого хранилища для одинакового контента (содержания).

Кратко о классе String

Строки String являются неизменяемыми, поэтому строковые литералы с таким контентом хранятся в пуле строк. Изменение содержимого одной строки непосредственно может вызвать нежелательные побочные эффекты и может повлиять на другие строки, использующие ту же память.

Обратитесь к API JDK для того чтобы ознакомиться с полным списком возможностей класса String в java.lang.String.

Методы класса String

//длина

String

int length() возвращаетдлину//

boolean isEmpty() // то же самое thisString.length == 0 //сравнение

boolean equals(String another)НЕЛЬЗЯ//использовать'=='или'!='

длясравненияобъектов

String в

Java

boolean equalsIgnoreCase(String

another)

int compareTo(Stringвозвращаетеслиэта0 строка another)

//

совпадаетanother;

 

another; or >0

//еслилексикографически<0 меньше

 

int compareToIgnoreCase(String another) boolean startsWith(String another)

boolean startsWith(String another, int fromIndex) //поискначинается fromIndex

Классы StringBuffer и StringBuilder

JDK предоставляет два класса для поддержки возможностей по изменению строк: это классы StringBuffer и StringBuilder (входят в основной пакет java.lang ).

StringBuffer используется для многопоточных программ StringBuilder для для однопоточных

Методы StringBuffer.

java.lang.StringBuffer. //Методы класса:

// конструкторы

StringBuffer() // инициализация пустой строкой StringBuffer(int size)// определяет размер при инициализации StringBuffer(Stringинициализируетясодержимымs s) //

int length()длинастроки// //Методыдляконструисодержимогоования

StringBuffer append(type arg) /*типможетбытьпримитивным, char[], String, StringBuffer, т.д.*/ //Методыдляманипуляцсодержимыми

StringBuffer delete(int start, int end) StringBuffer deleteCharAt(int index) void setLength(int newSize)

void setCharAt(int index, char newChar) StringBuffer replace(int start, int end, String s) StringBuffer reverse()

//Методыдлявыделенияцелого/частисодержимого char charAt(int index)

String substring(int start)

String substring(int start, int end) String toString()

//тодыдляMeпоиска

int indexOf(String searchKey)

int indexOf(String searchKey, int fromIndex) int lastIndexOf(String searchKey)

int lastIndexOf(String searchKey, int fromIndex)

Обратите внимание, что объект класса StringBuffer является обычным объектом в прямом понимании этого слова. Вам нужно будет использовать конструктор для создания объектов типа класс StringBuffer (вместо инициализации строки). Кроме того, оператор '+' не применяется к объектам, в том числе и к объектам StringBuffer . Вы должны будете использовать такой метод, как append() или insert() чтобы манипулировать StringBuffer .

Пример создания строки из частей

//СоздадимстрокутипаYYYY

-MM-DD

HH:MM:SS

int year = 2010, month = 10, day =

10;

int hour = 10, minute = 10, second

= 10;

String dateStr = new StringBuilder().append(year).append("- ").append(month).append("").append(day).append("").append(hour)

.apend(":").append(minute).append(":").append(second).toString(); System.out.println(dateStr);

// StringBuilder более эффективный конкатенация String

String anotherDataStr = year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second; System.out.println(anotherDataStr);

Почему стоит использовать StringBuffer и StringBuilder

Объекты StringBuffer или StringBuilder так же, как и любые другие обычные объект хранятся в куче, а не совместно в общем пуле строк.

Следовательно, могут быть изменены, не вызывая нехороших побочных эффектов на другие объекты.

Продолжение GUI

•Графический интерфейс пользователя (GUI) в Java создается с помощью по меньшей мере трех типов объектов:

•компоненты

•события

•слушатели событий

•Мы ранее обсуждали компоненты, которые являются объектами, которые представляют элементы экрана

•Надписи (labels), кнопки (buttons), текстовые поля (text fields), меню и т.д.

•Некоторые компоненты контейнеров, которые содержат и позволяют организовывать другие компоненты

•Фреймы (frames), панели (panels), диалоги и т.д.

•Событие представляет собой объект, который представляет собой некоторую активность, на которою мы можем ответить некоторым образом

•Например, мы можем захотеть нашу программу, чтобы выполнить какое-либо действие, когда происходит следующее:

•Движение мыши

•Перетаскивание мышью

•Нажатие кнопки мыши (лев или прав)

•Нажатие кнопки GUI

•Нажатие клавиши клавиатуры

•Истечение времени по таймеру

•События часто соответствуют действия пользователя, но не всегда

Обработка событий в Java

События и слушатели

Стандартная библиотека классов Java содержит несколько классов, которые представляют собой типичные события. Компоненты, такие как кнопки, генерируют событие, когда оно происходит. Объект слушателя "ждет” события, которое должно произойти и реагирует соответствующим образом. Мы можем конструировать объекты слушателя и принимать любые действия, которые уместны при возникновении события.

GUI Разработка

Как правило, мы используем компоненты и события, которые представляют предопределенные классы в библиотеке классов Java. Поэтому, чтобы создать программу Java, которая использует графический интерфейс мы должны:

•создать экземпляры объектов и настроить необходимые компоненты

•реализовать классы слушателя для любых событий, мы заботимся

•установить связь между слушателей и компонентами, которые генерируют соответствующие события

Давайте теперь рассмотрим некоторые новые компоненты и посмотреть, как все это происходит вместе.

Структура GUI java

Концепция MVC

Приложение должно состоять из 3-х фундаментальных логических частей:

•controller (контроллер),

•model (модель),

•view (представление/отображение).

Блок controller – преобразует действия пользователя (в данном контексте, пользователь – не обязательно человек) во входящие параметры для

Model и передает управление в Model. Блок model – реализует всю логику работы программы и подготавливает данные для отображения. Блок view – визуализирует результаты работы программы.

Каждое действие пользователя всегда запускает цепочку controller- >model->view.

Структура GUI java

Окно JFrame

Каждая GUI-программа запускается в окне и по ходу работы может открывать несколько дополнительных окон.

Вбиблиотеке Swing описан класс JFrame, представляющий собой окно

срамкой и строкой заголовка (с кнопками «Свернуть», «Во весь экран» и «Закрыть»). Оно может изменять размеры и перемещаться по экрану.

Панель содержимого

Напрямую в окне элементы управления не размещаются. Для этого служит панель содержимого, занимающая все пространство окна*.

Обратиться к этой панели можно методом getContentPane() класса JFrame. С помощью метода add(Component component) можно добавить на нее любой элемент управления.

Класс Container (контейнер)

Элементы, которые содержат другие элементы, называются контейнерами. Все они являются потомками класса Container и наследуют от него ряд полезных методов:

• add(Component component) — добавляет в контейнер элемент component;

•remove(Component component) — удаляет из контейнера элемент component;

•removeAll() — удаляет все элементы контейнера;

•getComponentCount() — возвращает число элементов контейнера.

Класс JPanel (панель)

Панель JPanel — это элемент управления, представляющий собой прямоугольное пространство, на котором можно размещать другие элементы. Элементы добавляются и удаляются методами, унаследованными от класса Container.

На самом деле у каждой панели есть так называемый менеджер размещения, который определяет стратегию взаимного расположения элементов, добавляемых на панель. Его можно изменить методом setLayout(LayoutManager manager). Но чтобы передать в этот метод нужный параметр, необходимо знать, какими бывают менеджеры.

GUI проектирование

Мы должны помнить, что цель программного обеспечения, чтобы помочь пользователю решить проблему

•С этой целью проектировщик GUI должен:

•Узнать нужды пользователя

•Предотвратить ошибки пользователей

•Оптимизацию возможностей пользователя

•Быть последовательным

Будьте последовательными

Последовательность –это важно, так-как пользователи привыкают к некоторым вещам, появляющихся и работающих в определенном порядке и связанными определенными отношениями. Цвета должны быть использованы последовательно, чтобы указывать на схожие типы информации или ее обработку. Структура экрана должна соответствовать принятому шаблону при переходе из одной части системы в другую ( например при переходе через меню). Например, сообщения об ошибках должны появляться в местах, соответствующих разработанной структуре меню.

Менеджеры Layout

Менеджер layout manager является объектом, который определяет способ, которым компоненты расположены в контейнере.

Есть несколько предопределенных менеджеров компоновки, определенных в стандартной библиотеке классов Java:

Каждый контейнер имеет менеджер компоновки по умолчанию, но мы можем явным образом установить менеджер компоновки, а также. Каждый менеджер компоновки имеет свои особые правила, регулирующие, как будут организованы компоненты. Некоторые менеджеры компоновки обратить внимание на нужный размер или Расстановка компонента, в то время как другие этого не делают. Менеджер компоновки пытается настроить расположение по мере добавления компонентов и, как контейнеры изменены.

Мы можем использовать метод setLayout , что бы изменить Layout менеджер

JPanel panel = new JPanel();

panel.setLayout(new BorderLayout());

В следующем примере используется контейнер с закладками, который позволяет работать с одной из нескольких панелей, которые могут быть выбраны

Flow Layout

Flow layout располагает столько компонентов, сколько можно расположить в ряд, затем переходит к следующей строке. Ряды создаются по мере необходимости, чтобы вместить все компоненты. Компоненты отображаются в порядке их добавления в контейнер. Каждая строка компонентов центрируется по горизонтали в окне по умолчанию, но могут быть также выровнены влево или вправо. Кроме того, горизонтальные и вертикальные зазоры между компонентами может быть явно установлены.

Border Layout

Компонент border layout определяет пять областей, в которых компоненты могут быть добавлены с ориентацией по сторонам света и в центре.

BorderLayout – это один из layout Java Swing, который используется для расположения компонентов на контейнере. Принцип, который использует

Соседние файлы в папке Лекции